Browse Source

Added afterValidate callback to maintain consistency across all other callbacks in the model layer

Jose Lorenzo Rodriguez 14 years ago
parent
commit
52c7b2383c

+ 9 - 0
lib/Cake/Model/Model.php

@@ -744,6 +744,7 @@ class Model extends Object implements CakeEventListener {
 			'Model.beforeFind' => array('callable' => 'beforeFind', 'passParams' => true),
 			'Model.afterFind' => array('callable' => 'afterFind', 'passParams' => true),
 			'Model.beforeValidate' => array('callable' => 'beforeValidate', 'passParams' => true),
+			'Model.afterValidate' => array('callable' => 'afterValidate'),
 			'Model.beforeSave' => array('callable' => 'beforeSave', 'passParams' => true),
 			'Model.afterSave' => array('callable' => 'afterSave', 'passParams' => true),
 			'Model.beforeDelete' => array('callable' => 'beforeDelete', 'passParams' => true),
@@ -3312,6 +3313,14 @@ class Model extends Object implements CakeEventListener {
 	}
 
 /**
+ * Called after data has been checked for errors
+ *
+ * @return void
+ */
+	public function afterValidate() {
+	}
+
+/**
  * Called when a DataSource-level error occurs.
  *
  * @return void

+ 1 - 0
lib/Cake/Model/ModelValidator.php

@@ -229,6 +229,7 @@ class ModelValidator implements ArrayAccess, IteratorAggregate, Countable {
 			}
 		}
 
+		$model->getEventManager()->dispatch(new CakeEvent('Model.afterValidate', $model));
 		return $model->validationErrors;
 	}
 

+ 15 - 0
lib/Cake/Test/Case/Model/ModelValidationTest.php

@@ -1880,4 +1880,19 @@ class ModelValidationTest extends BaseModelTest {
 		$this->assertFalse(isset($Validator['other']['numeric']));
 		$this->assertTrue(isset($Validator['other']['range']));
 	}
+
+/**
+ * Tests validation callbacks are triggered
+ *
+ * @return void
+ */
+	public function testValidateCallbacks() {
+		$TestModel = $this->getMock('Article', array('beforeValidate', 'afterValidate'));
+		$TestModel->expects($this->once())->method('beforeValidate');
+		$TestModel->expects($this->once())->method('afterValidate');
+
+		$TestModel->set(array('title' => '', 'body' => 'body'));
+		$TestModel->validates();
+	}
+
 }

+ 1 - 1
lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php

@@ -313,4 +313,4 @@ class CakeValidationSetTest  extends CakeTestCase {
 		$this->assertFalse(isset($Set['other']));
 	}
 
-}
+}