エラーが発生します:
型エラー:引数が少なすぎます
Laravel=引数が完全に渡されなかった場合に魔法をかける?
例えば:
コントローラーには:
public function create(CreateRequest $request)
{
return $this->todoService->createList($request);
}
todoService
クラス内:
use App\Plan
class todoService {
public function createList($request, Plan $plan)
{
//
}
}
ご覧のとおり、Plan
クラスオブジェクトを渡しませんでした。バインドする必要がありますか?
自分でcreateList()を呼び出す場合、両方のパラメーターを自分で渡す必要があります。 Planで何かをバインドできますが、それでもLaravel以外のものを呼び出す場合は、その関数パラメーターを渡す必要があります。
このタイプのヒントは、Laravelがその関数を呼び出している場合にのみ機能します。したがって、Laravelを介してこれらの関数を呼び出す必要があります。
クラスのコンストラクターに自動的に注入しようとしている場合、これを行うことができます。
_$service = $this->app->make('App\Plan\todoservice');
_
または
_$service = App::make('App\Plan\todoservice');
_
または
_$service = resolve('App\Plan\todoservice');
_
しかし、これはコンストラクタに対してのみ機能します。 make()
またはresolve()
関数の次の引数としてパラメーターを提供することもできます。
実際、別のメソッドもそのように呼び出すことができます。
簡単にできます:
_ $service = App::make('App\Plan\todoservice');
$container->call([$service, 'createList'], ['request' => $request] );
_
ここで_$container
_は_Illuminate\Contracts\Container\Container
_のオブジェクトです。
bind
クラスは、インターフェースに依存している場合にのみ必要です。特定のクラスを指定すると、リフレクションが自動的にジョブを実行します。 ドキュメント
これが機能する唯一の方法は、2番目のパラメーターのデフォルト値を設定することです。その他の状況では、構文例外がスローされます。
use App\Plan
class todoService
{
public function createList($request, Plan $plan = null)
{
//
}
}
public function create(CreateRequest $request)
{
return $this->todoService->createList($request);
}
それは動作しますが、それは意味がありますか?
Laravelは、このレベルで魔法をかけることはできません。コーディングエラーは単にPHP構文エラーです。2番目のパラメーターはPlan
型であり、必須です。 Laravelは、このような単純な関数呼び出しを「パッチ」することはできません。
あなたの混乱は、ルーティングに応じて、Laravelが正しいPlan
パラメーターをcreate
コントローラーメソッドに注入できるため、転送することができるという点にあります。サービスに。
/**
* Create a new personal access token for the user.
*
* @param string $name
* @param array $scopes
* @return \Laravel\Passport\PersonalAccessTokenResult
*/
public function createToken($name, array $scopes = [])
{
return Container::getInstance()->make(PersonalAccessTokenFactory::class)->make(
$this->getKey(), $name, $scopes
);
}
/**
* Set the current access token for the user.
*
* @param \Laravel\Passport\Token $accessToken
* @return $this