2016-04-27 8 views
1

私はLaravel 5.3を使用しています。要求クラスを拡張する私のフォーム要求では、親クラスからメソッドにアクセスしようとしていますが、それはエラーを投げているので、なぜ私は見ることができません。私のフォームリクエストコンストラクタは次のようになります。私はここに何かを逃していますか子クラスコンストラクタ内から親クラスメソッドにアクセス

私は他のメソッドに置いたときに呼び出すことができます。それは、理想的に必要なコンストラクタからではありません。

protected $test= []; 

    public function __construct(myRepositoryInterface $myRepository) { 

     $this->myRepository= $myRepository; 
     if(parent::has('someName')){ 
      $this->test= $myRepository->someMethod(parent::input('someName')); 
     } 
    } 
+0

クラスにinit()メソッドを作成し、それをコンストラクタから呼び出します。 – Gala

+0

問題は 'parent :: has'または' parent :: input'のいずれか、あるいはその両方です。このエラーに基づいて、親オブジェクトのどこかに、通常定義されているものが定義されておらず、laravelがその値を使って何かを呼び出そうとしていることを賭けています。私が最初に疑ったように、それは 'parent ::'呼び出し自体とはほとんど関係がありません:) – aaronofleonard

+0

@Amleonardそうです、私の考えはコンストラクターがその作業を完了するまで、私はできませんそれらのメソッドに適切にアクセスします。別のメソッドでも同じコードを呼び出すことはできますが、コンストラクタでは失敗します。ありがとう。 – jiraiya

答えて

2

問題がいくつかあります。

まず、LaravelのForm RequestクラスはSymfonyのRequestクラスのサブクラスです。あなたはそのクラスを見てみた場合、それはこのコンストラクタを持っている:

public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null) 
{ 
    $this->initialize($query, $request, $attributes, $cookies, $files, $server, $content); 
} 

あなたがあなた自身のコンストラクタを作成し、基本的にそれを壊し、Requestクラスの振る舞いを変更しました。スーパークラスに必要なパラメーターを受け入れていません。

Call to a member function get() on nullはヒントを与えます。

protected function retrieveItem($source, $key, $default) 
{ 
    if (is_null($key)) { 
     return $this->$source->all(); 
    } 

    return $this->$source->get($key, $default); 
} 

あなた$sourceがnullである:これはget()が呼び出される関数です。 $sourceは、headersのようなものですが、新しいコンストラクタのためにnullです。このエラーは、親クラスのhasメソッドと何も関係なく、コンストラクタで行うべきことは何もありません。

第2に、parent::has()を呼び出すのではなく、$this->has()を呼び出す必要があります。

最後に、私はそれをコンストラクタから取り出します。リポジトリをどこか他の場所で初期化します。何らかの理由でコンストラクタ内にこれが必要な場合は、他のすべてのパラメータを受け入れてからリポジトリを受け入れてみてください。 parent::__construct(...parameters...と覚えておいてください)、独自のロジックを実行してください。

+2

トーマスさん、本当にありがとうございました。私は非常に感謝します。 – jiraiya

+0

私は$ this-> has()とparentを使ってみて誰にも役立つかどうか調べました。 – jiraiya

0

月 "601::\ SRC \を照らし\のHttp Request.php \ベンダー\ laravelの\フレームワークでヌルにメンバ関数のget()の呼び出し致命的なエラー" は、以下の親へのアクセス

トリガー子コンストラクタでparent :: __ construct()を呼び出すのを忘れていますか?

+1

申し訳ありませんが、私はあまりにも早く話しました。エラーは停止しますが、メソッドは空の値しか返しません。コンストラクタが処理を終了するまで、コンテンツにはアクセスできません。 – jiraiya