我有一个名为'Admin'的插件,我的方法就像索引,添加等。由于我想应用唯一的模型名称和控制器名称(用于ACL实现),我使用插件名称为所有控制器和模型添加了前缀(请参阅cakephp plugin model/controller cache issue with main model/controller)。之后,我面临以下问题。我有一个名为users的表,我正在使用cakephp2.0。
1)我必须使用domain.com/admin/admin_users/index或admin / content / admin_index访问网址,而我想通过admin / users / index或admin / content / index访问。如何在路线中以一般方式设置它,以便它将应用于所有?
2)在视图中,它显示未定义的索引用户(我之前已经烘焙了视图)。一切都以AdminUser的形式出现。设置public $ alias ='User'后,此问题已解决。这是对的吗?
3)在控制器中,我必须将“$ this-> User-> some var / fn”更改为$ this-> AdminUser->某些var / function是所有位置。有什么方法可以解决这个问题吗?
插件名称作为管理员给出了什么问题(我没有设置管理员路由)?
答案 0 :(得分:2)
您可以安全地命名您的插件管理员,这绝不是一个保留字。但是,在解析模型/控制器名称时,Cake不会考虑插件名称,因此AdminUsersController
和AdminUser
实际上将被视为属于某些抽象AdminUser的类。因此,要仅使用Cake magic解决所有问题,您必须将它们命名为User和UsersController,并希望这些名称不会发生冲突。如果这不是一个选项,你可以提供一些自己的魔力来解决这些问题:
1)如何为控制器设置别名是the cookbook
中的路由配置示例之一2)Yups,如果你想使用“User”作为关键,那是正确的。
3)不仅仅使用Cake魔术,因为$uses
变量不支持别名。但是,您可以通过在AdminUsersController中执行类似的操作来利用2.0的新延迟加载:
<?php
public function __get($name) {
// Note, the isset triggers lazy-loading. Check out Controller::__isset()
// if you want to see how that works.
if ($name == 'User' && isset($this->AdminUser)) {
// Assign to admin user here to bypass the next time
return ($this->User = $this->AdminUser);
}
// Delegate to CakePHP's magic getter
return parent::__get($name);
}