2012-01-27 65 views
0

我有一個名爲'Admin'的插件,我的方法類似於索引,添加等。由於我想應用唯一的模型名稱和控制器名稱(對於ACL實現),我將所有控制器和帶有插件名稱的型號(請參閱cakephp plugin model/controller cache issue with main model/controller)。之後,我面臨以下問題。我有一個名爲用戶的表格,我正在使用cakephp2.0。Cakephp插件模型名稱前綴

1)我必須通過domain.com/admin/admin_users/index或admin/content/admin_index訪問url,而不是我想要通過admin/users/index或admin/content/index訪問。如何以一般方式在路線中設置它,以便將其應用於所有路線?

2)鑑於,它顯示未定義的索引用戶(我已經烘焙的意見之前)。一切都以AdminUser的身份來臨。設置公共$ alias ='User'後,此問題已解決。它是否正確 ? 3)在控制器中,我必須將「$ this-> User-> some var/fn」更改爲$ this-> AdminUser-> var var/function是所有地方。任何方式來解決這個問題?

作爲管理員(我沒有設置管理路由)插件名稱給出任何錯誤?

回答

2

你可以安全地命名你的插件管理員,這絕不是一個保留字。但是,Cake在解析模型/控制器名稱時並未考慮插件名稱,因此AdminUsersControllerAdminUser實際上將被視爲屬於某個抽象AdminUser的類。因此,要僅使用Cake魔法來解決所有問題,您必須將其命名爲User和UsersController,並希望這些名稱不會發生衝突。如果這不是一個選項,你可以提供一些自己的魔法來解決這些事情:

1)如何別名控制器的路由配置實例之一the cookbook

2)Yups,如果你想要使用「用戶」作爲關鍵,這是正確的。

3)不是真的只用Cake魔術,因爲$uses變量不支持別名。但是,您可以利用新的延遲加載2.0,在AdminUsersController中執行類似操作:

<?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); 
} 
+0

感謝您的回覆。我需要爲我的第一個查詢解決方案。我試了很多,但沒有得到任何解決方案 – binoy 2012-02-09 13:19:30

+1

你的意思是如何別名控制器?如果您在我的答案中查看路線配置網址,則有一個例子,如果您在頁面中搜索「別名」。您可以將'/ admin/users /:action/*'映射到'array('controller'=>'admin_users','plugin'=>'admin')'以獲得AdminUsersController所需的結果。如果您想爲管理插件中的所有控制器自動執行此操作,則可能必須使用自定義路由類。 – 2012-02-15 11:02:34