問題がいくつかあります。
まず、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...
と覚えておいてください)、独自のロジックを実行してください。
クラスにinit()メソッドを作成し、それをコンストラクタから呼び出します。 – Gala
問題は 'parent :: has'または' parent :: input'のいずれか、あるいはその両方です。このエラーに基づいて、親オブジェクトのどこかに、通常定義されているものが定義されておらず、laravelがその値を使って何かを呼び出そうとしていることを賭けています。私が最初に疑ったように、それは 'parent ::'呼び出し自体とはほとんど関係がありません:) – aaronofleonard
@Amleonardそうです、私の考えはコンストラクターがその作業を完了するまで、私はできませんそれらのメソッドに適切にアクセスします。別のメソッドでも同じコードを呼び出すことはできますが、コンストラクタでは失敗します。ありがとう。 – jiraiya