2012-07-31 60 views
1

有沒有任何方法可以在CakePHP(2. *)中訪問mvc之外的當前控制器或請求對象?訪問CakePHP控制器或mvc外的請求對象

基本上我需要訪問爲CakePHP設計的庫中的請求對象,但應儘可能地自行運行 - 換句話說,我想避免控制器中任何不必要的特定於lib的初始化代碼本身要保持的。

我已經爲此寫了一個組件,但不是所有對lib的調用都將直接來自控制器。我也想避免在其他任何地方但在lib內傳遞$ controller或$ request變量。

我從來沒有看過CakePHP類加載很多,但我可以從CakePHP 1.3新的時候回想起有關ClassRegistry的一些事情。在控制器動作測試ClassRegistry後不久,我發現它是空的(用ClassRegistry :: keys()和pr()直接從類確定)

那麼,有沒有任何友好的方式來獲得請求對象還是應該使用醜陋的方法?

+0

您是否考慮過供應商?我從CakePHP 1.2.x的背景講話?如果你的意思是你想從當前控制器運行或訪問另一個控制器,它也將完成。 – 2012-07-31 23:04:07

+0

我的意思是我想知道CakePHP是否有辦法從應用程序中的任何位置獲取當前控制器 - 主要來自與CakePHP的MVC結構無關的庫類型類。 我已經找到了解決這個問題的方法,但我仍然很好奇,所以我會留下這個問題。 – jpeltoniemi 2012-08-01 11:53:28

回答

5

Router::getRequest()應該讓你CakeRequest實例。

0

以下代碼示例可以幫助您嗎?

//in Socials Controller importing SocialUsers controller 
function __checkSocialUser($title, $user_id){ 
    App::import('Controller', 'SocialUsers'); 
     $SocialUsers = new SocialUsersController; 
     $SocialUsers->constructClasses(); 
     $ourUserId = $this->Auth->user('id'); 
     $SocialUsers->data = array('SocialUser' => array('title' => $title, 'identifier' => $user_id, 'user_id' => $ourUserId)); 
     $result = $SocialUsers->checkUser($title, $user_id);.... 
+0

對不起,不。我需要通過客戶端/瀏覽器請求或requestAction()訪​​問當前正在執行的控制器。 – jpeltoniemi 2012-08-01 19:24:07

+0

那麼,你可以通過JSON訪問控制器的動作。只需讓您的操作輸出應用JSON,即設置$ this-> autorender = false並調整echo或printf即可打印出JSON文本格式。 – 2012-08-01 19:44:37