我应该使用App :: import('Model',...)还是ClassRegistry(...)?

ano*_*ard 8 php frameworks cakephp cakephp-1.3

由于其他答案(如此),我只想澄清CakePHP 1.3中应该使用的内容.

具体来说,我有一种情况要求一个模型依赖于另一个,所以从该模型中的方法我想加载另一个,用信息做一些事情,等等.

App Class文档说:

在以前的版本中,根据您要加载的类的类型,有不同的函数来加载所需的类.这些函数已被弃用,所有类和库加载应该现在通过App :: import()完成.

我假设这涵盖了使用ClassRegistry等等,但我只是希望它清楚,并且确定:

我是否应该App::import('Model', ...)使用另一个模型或其他模型?如果别的什么,什么?

ano*_*ard 13

看来,即使ClassRegistry::init()引用文件,即使是自2008年以来的两年,最好的方法仍然是使用.

这在特定类/方法的实际API /文档中很明显.

App::import()

根据$ name或要搜索的特定文件查找类.调用App :: import()不会构造文件中包含的任何类.它只会找到并要求()文件.

ClassRegistry::init()

加载一个类,在注册表中注册该对象并返回该对象的实例.

示例简单使用:获取Post模型实例ClassRegistry :: init('Post');

正如您所看到的,即使API文档也指出了使用ClassRegistry加载模型的示例,为您实例化它们,而不是App::import(尽管更少),尽管CakePHP"Book"文档中的措辞已经改变.


RSK*_*RSK 7

如果您可以关联模型,那么最好的方法是使用动态绑定关系

$this->bindModel("hasOne" => array("Model2")).

如果您无法关联模型,并且只想在一次出现时使用第二个模型,那么您可以使用

ClassRegistry::init('Model2')->find('allThatIWant');

如果你想在几次出现时使用它,你必须尝试

$this->model2 = & ClassRegistry::init('Model2') 
$this->model2->find('allThatIWant');
Run Code Online (Sandbox Code Playgroud)