CakePHP не загружает поведение связанных моделей на плагин
Я программирую плагин для приложения CakePHP, который имеет следующие модели:
Предрегистрационная модель
App::uses('PreinscriptionAppModel', 'Preinscription.Model');
class Preregistry extends PreinscriptionAppModel {
public $hasMany = array(
'Relative'
);
public $actsAs = array(
'Date' => array(
'birthday' => array(
'format' => '%d/%m/%Y'
),
'registry_date' => array(
'format' => '%d/%m/%Y'
)
)
);
}
Относительная модель
App::uses('PreinscriptionAppModel', 'Preinscription.Model');
class Relative extends PreinscriptionAppModel {
public $name = 'Relative';
public $actsAs = array(
'Date' => array(
'birthday' => array(
'format' => '%d/%m/%Y'
)
)
);
public $belongsTo = array(
'Preregistry'
);
}
Соответствующей частью Контроллера является:
<?php
App::uses('PreinscriptionAppController', 'Preinscription.Controller');
class PreregistriesController extends PreinscriptionAppController {
public function add() {
$preregistryDateConfig = $this->Preregistry->getDateConfig();
$relativeDateConfig = $this->Preregistry->Relative->getDateConfig();
}
}
Проблема у меня при звонке $this->Preregistry->Relative->getDateConfig();
Дата поведения не загружается на Relative
модель, поэтому он выдает ошибку MySQL, потому что модель не имеет getDateConfig()
метод.
Когда я проверяю, загружено ли поведение $this->Preregistry->Relative->Behaviors->loaded('Date');
я вернул ЛОЖЬ.
По какой-то причине Поведение загружается только в Preregistry
модель, но не на Relative
модель. Я также пытался загрузить Поведение на лету, но безуспешно.
Если кто-то может сказать мне обойти эту проблему, я буду очень рад.
Если вам нужно больше кода или чего-либо еще, не стесняйтесь спрашивать.
Спасибо!
1 ответ
Я точно уверен debug($this->Preregistry->Relative)
покажет что Relative
это пример AppModel
,
Это потому, что в ваших ассоциациях отсутствует правильное имя плагина, оно должно быть:
public $hasMany = array(
'Preinscription.Relative'
);
а также
public $belongsTo = array(
'Preinscription.Preregistry'
);
в противном случае CakePHP не будет извлекать модели из плагина, но создаст экземпляр AppModel
вместо ассоциаций (если нет Relative
соответственный Preregistry
в любом из настроенных местоположений модели), который затем, конечно, не хватает Date
поведение.
Смотрите также http://book.cakephp.org/2.0/en/plugins.html