내 응용 프로그램을 빌드하는 방법 때문에 beforeSaveAssociated
및 afterSaveAssociated
에 대한 이벤트 처리기를 만들어야합니다. 이 수 있도록하기 위해, 나는 AppModel.php 다음과 같은 관련 코드가 포함하도록 업데이트했습니다 :이 모델 클래스 내에서 정의 된 모든 beforeSaveAssociated
을 위해 잘 작동하지만 나는 행동을 정의 할 때마다,CakePHP : 동작에서 사용자 지정 이벤트 트리거
public function saveAssociated(array $data = null, array $options = array()) {
$this->after_save_options = NULL;
$event = new CakeEvent('Model.beforeSaveAssociated', $this, array(&$data, &$options));
$this->after_save_options = NULL;
$this->getEventManager()->dispatch($event);
if (parent::saveAssociated($data, $options)) {
if (is_array($this->after_save_options)) {
$curData = $this->data;
$this->data = $this->_tempData;
$event = new CakeEvent('Model.afterSaveAssociated', $this, $this->after_save_options);
$this->after_save_options = NULL;
$this->getEventManager()->dispatch($event);
$this->data = $curData;
}
if ($this->_tempData) {
$this->_tempData = FALSE;
}
return TRUE;
}
return FALSE;
}
public function implementedEvents() {
return array_merge(parent::implementedEvents(), array(
'Model.beforeSaveAssociated' => array(
'callable' => 'beforeSaveAssociated',
'passParams' => TRUE,
),
'Model.afterSaveAssociated' => array(
'callable' => 'afterSaveAssociated',
'passParams' => TRUE,
),
));
}
을, 그것은 '아무튼 촉발 당한다. 위의 saveAssociated
을 Model.beforeSave
(내장 이벤트)을 트리거하도록 업데이트하면 올바르게 작동하지 않으므로 문제가되지 않습니다.
,
사실, 동작을 모델에 첨부하면 문제가 해결되었습니다. 나는 이것을 행동의'setup' 메쏘드에 추가했다 : $ model-> getEventManager() -> attach (function (array & $ data, & $ options) use ($ model) {$ this-> beforeSaveAssociated ($ model, $ data , $ options);}, 'Model.beforeSaveAssociated', array ('passParams'=> TRUE)); – corrideat