2016-04-04 8 views
1

私のコントローラの中には、複数のメソッドに渡される一般的なルートパラメータがあります。これらのパラメータのいくつかは、同じパラメータを渡し、これらのパラメータを使用する各コントローラメソッド内で同じ処理メソッドを呼び出す必要がある余分な処理(文字列処理)を必要とします。コードを複製するのではなく、コントローラのコンストラクタメソッドで、そのコントローラの特性とその特性への呼び出しが含まれています。Laravelコントローラコンストラクタの問題

これはうまくいく、これらのパラメータをクラスのプロパティにバインドすることができ、私のすべての方法でアクセスできます。問題は、artisan route:listのようなコントローラをインスタンス化する職人コマンドを実行する場合です。そのコマンドを実行しているとき、私は次のエラーを取得する:

Call to a member function getParameter() on null

私はルートまたはRequestオブジェクトが存在しないので、職人を実行しているときにRoute::current()の呼び出しがnullを返しますので、これは知っているが、私は自分がコメントした見つけます私の特性のコードを外に出して、私のルートのリストを取得してください。私は、起こりうる他の問題もあると確信しています。

私の質問は、どうすればこれをよりクリーンにすることができますか?私が現在考えることができる唯一の解決策は、すべてのコントローラメソッドでパラメータ登録メソッドを呼び出すことですが、私はそれをしたくありません。何か案は?

+0

いくつかの例を含めることができればうれしいです。 – imrealashu

+0

これはかなり簡単な質問です。コントローラのコンストラクタ関数内の 'Route'と' Request'ファサードに、 'artisan'コマンドと衝突することなくアクセスする方法が必要です。この場合の例は不要です。 – samrap

+0

'if(php_sapi_name()!= 'cli'){//リクエストと疎開}'を使うことができます。 –

答えて

0

特性を使用する代わりに、Controller.phpファイルを変更して、他のコントローラが継承する共通コードを含めることができます。あなたのすべてのコントローラーextends Controller以来、一般的な機能が利用できるように、コード内で$this->getParameter()を呼び出すことができます。

+0

私の質問の終わりを読んでください、 "私は現在、すべてのコントローラーメソッドでパラメータ登録メソッドを呼び出すことができると思う唯一の解決策ですが、私はそれをしたくありません"。そして、私は、抽象Controller.phpクラスに含まれる特性を使用しています – samrap