2012-05-02 117 views
1

我創建了一個簡單的CMS管理建立在CakePHP的幾個小網站。將插件從1.3成功遷移到2.0後,在將Cake更新到最新版本2.1.2後,我遇到了AuthComponent問題。定義自定義表AuthComponent

插件的類名都是由插件的名稱前綴,以避免重複的類名,作爲應用最股份與插件表。所以有些時候我有一個主要的應用爲我的CMS插件中UsersControllerPluginNameUsersController(或PostsControllerPluginNamePostsController)。插件模型依靠$useTable找到正確的數據庫表(因此PluginNamePostsController仍然使用posts)。

由於升級到Cake的2.1。*分支,AuthComponent已停止工作,因爲它預計不存在pluginname_users表,而不是參考users

是否可以定義自定義表的AuthComponent或是否有任何其他的方法來得到這個工作?此外,這是行爲預期?

該組件在PluginNameAppController配置如下:

public $components = array(
    'Session', 'RequestHandler', 
    'Auth'=> array(
     'loginAction' => array(
     'controller' => 'pluginname_users', 
     'action' => 'login', 
     'plugin' => 'pluginname' 
    ), 
     'loginRedirect' => array(
     'controller' => 'pluginname_posts', 
     'action' => 'index', 
     'plugin' => 'pluginname' 
    ), 
     'authenticate' => array(
     'Form' => array(
      'userModel' => 'PluginNameUser', 
      'fields' => array('username', 'password') 
     ) 
    ) 
    ) 
); 

回答

1

的AuthComponent實際上是不知道的表和這樣的。通過使用自定義模型,您可以在其上定義$table以在不同的表上工作。所以,第一件事就是建立你的插件的模式來使用正確的表格:

class PluginNameUser extends PluginAppModel { 
    public $table = 'users'; 
} 

然後,告訴你的身份驗證方法,通過使用點語法使用的插件模型。現在

'authenticate' => array(
    'Form' => array(
    'userModel' => 'PluginName.PluginNameUser', 
    'fields' => array('username', 'password') 
    ) 
) 

時FormAuthenticate嘗試進行認證,它會設法找出使用模式,它現在知道是PluginName用戶。它加載您設置爲使用users表的模型,並在那裏查找用戶。

+0

實際上,在'PluginNameUser'模型中定義'$ table'似乎沒有必要。我忽略了與插件的名稱的前綴'userModel',可能是因爲我正盯着自己在一個更大的不存在的問題失明。在爲userModel添加前綴後,Auth開始重新開始工作。謝謝您的幫助! – mensch