Cakephp插件模型名称前缀

时间:2012-01-27 10:05:30

标签: cakephp cakephp-2.0

我有一个名为'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是所有位置。有什么方法可以解决这个问题吗?

插件名称作为管理员给出了什么问题(我没有设置管理员路由)?

1 个答案:

答案 0 :(得分:2)

您可以安全地命名您的插件管理员,这绝不是一个保留字。但是,在解析模型/控制器名称时,Cake不会考虑插件名称,因此AdminUsersControllerAdminUser实际上将被视为属于某些抽象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);
}