在CakePHP2.x中,我经常在控制器中使用$uses
属性,但似乎CakePHP 3.0中不再提供此属性。
我知道加载非默认模型的唯一方法是使用loadModel()
方法。
这是推荐的加载模型的方法吗?或者还有其他方法来加载模型吗?
答案 0 :(得分:16)
您的观察结果是正确的,不再有$uses
属性,而是与控制器不匹配的模型/表格(PostsTable
的{{1}}除外)并且无法通过关联获得,必须明确加载。
这可以通过使用
来完成Controller::loadModel()
将实例作为属性添加到控制器。 TableRegistry::get()
只返回实例。TableLocator::get()
的CakePHP 3.1,通过TableRegistry::locator()
(CakePHP 3.5.0自TableRegistry::getTableLocator()
)或LocatorAwareTrait::tableLocator()
({{}检索定位器从CakePHP 3.5.0开始,通常不应该在控制器中使用它。所以这对你的问题PostsController
来说是肯定的,即
Controller::loadModel()
是一种可行的方式,可以将模型/表格实例添加到控制器中作为属性,至少在默认配置中,它实际上是以下的简写:
$this->loadModel('Name');
但更多$this->Name = TableRegistry::get('Name');
更抽象,并支持非表存储库。