/** * Validates the $entity if the 'validate' key is not set to false in $options * If not empty it will construct a default validation object or get one with * the name passed in the key * * @param \Cake\ORM\Entity The entity to validate * @param \ArrayObject|array $options * @return bool true if the entity is valid, false otherwise */ protected function _processValidation($entity, $options) { $type = is_string($options['validate']) ? $options['validate'] : 'default'; $validator = $this->_table->validator($type); $pass = compact('entity', 'options', 'validator'); $event = new Event('Model.beforeValidate', $this->_table, $pass); $this->_table->getEventManager()->dispatch($event); if ($event->isStopped()) { return (bool) $event->result; } if (!count($validator)) { return true; } $success = $entity->validate($validator); $event = new Event('Model.afterValidate', $this->_table, $pass); $this->_table->getEventManager()->dispatch($event); if ($event->isStopped()) { $success = (bool) $event->result; } return $success; }
/** * Constructor * * @param \Cake\ORM\Table $table */ public function __construct(Table $table) { $this->_table = $table; $this->_eventManager = $table->getEventManager(); }
/** * Test that beforeFind events are fired and can stop the find and * return custom results. * * @return void */ public function testFindBeforeFindEventOverrideReturn() { $table = new Table(['table' => 'users', 'connection' => $this->connection]); $expected = ['One', 'Two', 'Three']; $table->getEventManager()->attach(function ($event, $query, $options) use($expected) { $query->setResult($expected); $event->stopPropagation(); }, 'Model.beforeFind'); $query = $table->find('all'); $query->limit(1); $this->assertEquals($expected, $query->all()); }