在 CakePHP2.x 中,我经常$uses
在控制器中使用属性,但在 CakePHP 3.0 中似乎不再提供该属性。
我知道加载非默认模型的唯一方法是使用loadModel()
方法。这是加载模型的推荐方式吗?或者有没有其他方法来加载模型?
在 CakePHP2.x 中,我经常$uses
在控制器中使用属性,但在 CakePHP 3.0 中似乎不再提供该属性。
我知道加载非默认模型的唯一方法是使用loadModel()
方法。这是加载模型的推荐方式吗?或者有没有其他方法来加载模型?
您的观察是正确的,不再有任何$uses
属性,而是与控制器不匹配的模型/表(例如PostsTable
)PostsController
并且不能通过关联获得,必须显式加载。
这可以通过使用
Controller::loadModel()
它将实例作为属性添加到控制器。TableRegistry::get()
只返回实例。TableLocator::get()
检索定位器,但是控制器中通常不需要。TableRegistry::locator()
TableRegistry::getTableLocator()
LocatorAwareTrait::tableLocator()
LocatorAwareTrait::getTableLocator()
所以这对你的问题有点肯定Controller::loadModel()
,即
$this->loadModel('Name');
是一种将模型/表实例作为属性添加到控制器的可行方法,至少在默认配置中,它本质上是以下的简写:
$this->Name = TableRegistry::get('Name');
但 moreloadModel()
更加抽象,并且支持非表存储库。