2016-10-04 24 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 

私はこの

echo '<pre>'; 
print_r($GLOBALS['_SERVER']['HTTP_REFERER']);   
exit; 
を使用しようとしても、mは私が欲しいの結果を取得していますが、私はCakePHPの3.xのは、使用する他の適切な方法をしたい

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

ので、最終的に私は、この出力を与える

..

だから、他の方法がありますかそれよりも頻繁に私の現在のコントローラのアクションを得ることができますか?

任意のアイデア..

おかげで、あなたのモデルでルーティングクラスを使用する必要があり、すべての

+6

で料理の本にアクセスすることができ、より機能の参考のために

は、非常に悪い考え、つまり、あなたのモデルは、外の世界を知っていると、このような決定を下すことになっていません!コントローラがモデルからのデータを必要とする場合、コントローラは、モデルにどのデータが必要かを伝えます。ちょうどあなたが_正確に何かを照会する必要があるのか​​を精緻にすれば、より良い助けを得ることができます。 – ndm

+0

私はそれが理にかなっていないことを知っています。しかし、事を知ることは間違っていますか? –

+0

悪い習慣やそれを避ける方法のように、物事を知ることは間違いありません。そして、あなたが正しいことをする方法のようにもっと知りたければ、あなたが解決しようとしている実際の技術的問題、つまり既に言及されているように、正確に何かを質問する必要がありますか? 。 – ndm

答えて

2

最初に理解されるであろう。だから、一番上にある、あなたは

以下

use Cake\Routing\Router;

のようにそれを呼び出すことができます。そして、あなたの初期化関数であなたは

debug(Router::getRequest());

それとも

を使用することができ、より具体的になりたいのparamsを確認することができます

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

私はこれをc akephpクラスのみですが、小さなハックです。あなたは懸念の分離を明確に違反だRouter Class

+1

これは本当に悪い考えです。上のndmのコメントを参照してください。モデルは必ずしもこのようにアクセスされるわけではないので、コントローラ/ルートの知識がないはずです。これは悪いデザインパターンです! – drmonkeyninja

+1

はい、私は同意しますが、質問にはコントローラからの値を渡すことができますが、依然としてそこには方法があることがわかります。 **コントローラのアクションをモデルの関数に渡すことはできますが、私のモデル内で現在のコントローラのアクションをチェックするだけで、複数の関数に渡す必要はありません。 ** - @mittul –

+2

これは、このページにつまずいている人にとっては決して行わないでください。 'Router :: getRequest() - > params ['action']'メソッドが呼び出されたときにモデル内に存在しない可能性があるので、これは非常にハックリな解決策です。モデルはこの答えのようなコントローラに依存しません。 – drmonkeyninja

関連する問題