2009-09-11 70 views
1

我正在努力將驗證和授權集成到我的CakePHP應用程序中,並且遇到一些困難。CakePHP驗證和用戶模型

首先,我沒有使用ACL。 它嚇到我了。

在我的AppController我有這樣的:

var $components = array("Auth"); 

所以,任何時候,我要檢查登錄的用戶,我把這個從我的控制器之一:

$this->Auth->user(); 

我從我的usrs表(我的表被稱爲usrs與模型Usr)得到一個數組。

的問題是,我經常會想呼籲Usr模型的功能,所以我不得不這樣做在我的控制器:

$usr = ClassRegistry::init('Usr'); 
$usrInfo = $this->Auth->user(); 
$usr->set($usrInfo); 
// -- or -- 
$usr = ClassRegistry::init('Usr'); 
$usrId = $this->Auth->user('id'); 
$usr->id = $usrId; 

這似乎不是很cakey,它的被竊聽我因爲我知道必須有更好的辦法。我應該將var $uses = array("Usr")添加到我的AppController中,所以我不必一直使用ClassRegistry?什麼是最好的方法來做到這一點?

+0

如果你知道你可以調用模型的用戶,並設置$ useTable =「的USR」,或致電模型usr和設置$ useTable =' usr'或'users',還是你不喜歡字母'e'? :) – deizel 2009-09-11 09:30:07

+0

感謝thicic dizl。我做了一些我正在努力的kyboard issus。 ;)無論如何,我在一些博客中讀到,「用戶」是Oracle中的一個保留字(我現在首次使用它) - Oracle連接器並不是我見過的經過測試的最佳代碼,所以我認爲最好避免這個問題。 – nickf 2009-09-12 08:03:22

回答

0

我剛剛發現了一個辦法做到這一點的一條線:

$this->loadModel('Usr', $this->Auth->user('id')) 

我仍然不知道這是不是最好的做法,但...

+0

如果您只需要該控制器操作的模型而不是控制器中的所有操作,則Controller :: loadModel是控制器的最佳實踐。無需使用控制器,您需要使用'ClassRegistry :: init'和'App :: import',並且在使用這些控制器時,您應該問問自己是否仍然遵循MVC。這篇文章總結了Gwoo對這些方法的立場:http://techno-geeks.org/2009/05/models-inside-controller/ – deizel 2009-09-11 09:36:02

1

你爲什麼不只是use模型?

// in Controller 
var $uses = array('someModel', 'User'); 

這使得可以像往常一樣模型:

$this->User->someFunction($this->Auth->user('id')); // for example 
+0

如果我把它放在AppController上會工作嗎?它不會覆蓋默認值? (例如:默認情況下,PostsController具有'$ uses = array(「Post」);') – nickf 2009-09-11 05:31:43

+1

是的。 http://book.cakephp.org/view/829/The-App-Controller – deceze 2009-09-11 06:37:56

+1

$ uses將爲所有操作加載Usr模型,loadModel方法只會在需要時加載它。所以它真的在內存中的更多對象或控制器操作中的更多代碼之間折騰起來。 – deizel 2009-09-11 09:25:52