CakePHP不在插件上加载相关模型的行为

时间:2014-01-24 23:24:07

标签: php cakephp cakephp-2.3

我正在编写一个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');时,我得回FALSE。

出于某种原因,行为仅在Preregistry模型中加载,而不在Relative模型中加载。我也试图动态加载行为,但没有成功。

如果有人能告诉我这个问题的解决方法,我将非常高兴。

如果您需要更多代码或任何内容,请随时提出。

谢谢!

1 个答案:

答案 0 :(得分:3)

我非常确定debug($this->Preregistry->Relative)会显示RelativeAppModel的实例。

这是因为您在关联中缺少正确的插件名称,它应该是:

public $hasMany = array(
    'Preinscription.Relative'
);

public $belongsTo = array(
    'Preinscription.Preregistry'
);

否则CakePHP不会从插件中获取模型,而是为关联创建AppModel的实例(如果在任何一个中没有Relative相应的Preregistry配置的模型位置),当然缺少您的Date行为。

另请参阅 http://book.cakephp.org/2.0/en/plugins.html#plugin-models