При использовании обратных вызовов вы можете обратиться к API для класса, который вы расширяете, чтобы проверить параметры, которые он принимает. Ваша реализация должна принимать, как минимум, те же параметры, что и методы, которые вы переопределяете.
Например, Model::beforeDelete
реализовано так:
/**
* Called before every deletion operation.
*
* @param boolean $cascade If true records that depend on this record will also be deleted
* @return boolean True if the operation should continue, false if it should abort
* @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforedelete
*/
public function beforeDelete($cascade = true) {
return true;
}
А также, ModelBehavior::beforeDelete
реализован следующим образом (т. Е. При создании поведения):
/**
* Before delete is called before any delete occurs on the attached model, but after the model's
* beforeDelete is called. Returning false from a beforeDelete will abort the delete.
*
* @param Model $model Model using this behavior
* @param boolean $cascade If true records that depend on this record will also be deleted
* @return mixed False if the operation should abort. Any other result will continue.
*/
public function beforeDelete(Model $model, $cascade = true) {
return true;
}
Далее, полезно знать, что при сохранении в модель и передаче данных контроллера (т. Е. $this->data
в контроллере) эти данные устанавливаются для модели (т. Е. $this->data
в модели). [Это происходит в Model::save()
, в настоящее время в строке 1225 .]
В первом примере вы можете получить доступ к модели, используя $this
, а во втором примере вы можете получить доступ к модели, используя $model
(так как $this
будет поведение в этом контексте). Таким образом, чтобы получить данные, вы хотите использовать $this->data
или $model->data
. Вы также можете получить доступ к связанным моделям этой модели, используя цепочку (т. Е. $this->RelatedModel
или $model->RelatedModel
).
Как указано в комментариях к докблоку, $cascade
должен сообщить вам, происходит ли это каскадное удаление (true
по умолчанию) в случае, если ваш код должен предпринять другие действия, если это так или нет. ; и ваша реализация метода должна вернуть false, если вы хотите прервать операцию сохранения (в противном случае верните true, когда вы закончите).
Существует Медиа-плагин для CakePHP, который реализует эту точную функциональность , которую можно использовать в качестве ссылки.