2016-10-04 104 views
1

我正在使用cakephp 3.x已經把模型中的數據庫查詢,我想檢查當前的控制器動作,並基於這我會讓我的數據庫查詢。如何在cakephp 3.x模型中獲得當前控制器的動作

我知道我可以將控制器動作從我的控制器本身傳遞給我的模型函數,但有沒有辦法我只能檢查我的模型中的當前控制器動作,這樣我就不需要將它傳遞給我的多個函數只在模型內部。

我嘗試 - UsersTable.php

public function initialize(array $config) 
    { 
     parent::initialize($config); 
     $this->table('users');   
     $this->primaryKey('user_id'); 
     echo '<pre>'; 
     print_r($GLOBALS);   
     exit; 
    } 

到目前爲止,如果我這樣做,我響應了一個數組,其中我發現了這一點,在其他事情最好的結果陣列

[REQUEST_URI] => /5p_group/users/add 

我M還嘗試使用此

echo '<pre>'; 
print_r($GLOBALS['_SERVER']['HTTP_REFERER']);   
exit; 

這給了我這個輸出

http://localhost/5p_group/users/archived 

所以最終我得到我想要的結果,但我想這CakePHP的3.x中使用另一種方法正確..

那麼,有沒有任何其他方式或更頻繁的方式,我可以得到我目前的控制器行動?

任何想法可以理解..

感謝

+6

這是一個明顯違反了關注點分離的,即一個非常糟糕的主意訪問的菜譜,你的模型是不是應該瞭解外面的世界,做這樣的決定!如果一個控制器需要一個模型的數據,那麼它會告訴模型它想要什麼數據,而不是相反!如果你詳細說明你需要查詢_什麼時候正確_什麼時候你可以得到更好的幫助。 – ndm

+0

我知道它沒有道理..但知道這些東西是錯誤的嗎? –

+0

知道東西是絕對不會錯的,不喜歡不好的做法以及如何避免它們。如果你想知道更多,比如如何以正確的方式來做,那麼請詳細說明你正在試圖解決的實際技術問題,即已經提到的als,「你究竟需要什麼來查詢_什麼時候正確?」。 。 – ndm

回答

2

首先,你應該在你的模型中使用的路由類。因此,在頂部,你可以這樣調用它下面

use Cake\Routing\Router;

然後在你的初始化函數可以檢查PARAMS像

debug(Router::getRequest());

或者更具體一些,你可以使用

debug(Router::getRequest()->params['action']);

我認爲這是使用c只有akephp類,儘管是一個小黑客。

更多功能的參考,你可以在Router Class

+1

這是一個非常糟糕的主意,請參閱上面的ndm評論。模型應該不知道控制器/路由,因爲它們不一定以這種方式訪問​​。這是一個糟糕的設計模式! – drmonkeyninja

+1

是的,我同意,但這個問題只是說他可以傳遞控制器的值,但仍然想知道是否有辦法。 **我知道我可以從我的控制器本身傳遞控制器動作到我的模型函數,但有沒有辦法我只能檢查我的模型中的當前控制器動作,這樣我就不需要將它傳遞給我的多個函數僅限於模型內部。** - @mittul –

+2

只要突出顯示,不應該爲任何人在此頁面中絆倒而完成此操作。這是一個非常冒險的解決方案,因爲調用方法時,模型中可能不存在'Router :: getRequest() - > params ['action']'。模型不像這個答案那樣依賴於控制器。 – drmonkeyninja

相關問題