Laravel - Type d'erreur: Trop peu d'arguments?
J'obtiens une erreur:
Type d'erreur: Trop peu d'arguments
Je pensais que Laravel faire de la magie pour si des arguments n'est pas entièrement passé?
Par exemple:
Dans le Contrôleur, j'ai:
public function create(CreateRequest $request)
{
return $this->todoService->createList($request);
}
Dans le todoService
classe:
use App\Plan
class todoService {
public function createList($request, Plan $plan)
{
//
}
}
Comme vous pouvez le voir je n'ai pas réussi Plan
objet de classe. Dois-je lier ou quelque chose?
Vous devez vous connecter pour publier un commentaire.
Si vous appelez createList() par vous-même de sorte que vous aurez besoin pour passer les deux paramètres par vous-même. Vous pouvez lier quelque chose avec le Plan, mais encore si vous appelez quelque chose de pas Laravel, alors vous serez responsable pour passer que les paramètres de la fonction.
Ce type hinting ne fonctionne que si Laravel est l'appel de cette fonction. Si vous avez besoin d'appeler ces fonctions par le biais de Laravel.
Si vous essayez d'injecter automatiquement dans le constructeur de la classe, vous pouvez simplement faire ceci:
ou
ou
Mais cela ne fonctionne que pour les Constructeurs. Veuillez noter que vous pouvez également fournir des paramètres à côté des arguments de
make()
ouresolve()
fonction.En fait, différentes méthodes peuvent aussi être appelé de cette façon.
Vous pouvez tout simplement faire:
Ici
$container
est l'objet de laIlluminate\Contracts\Container\Container
.Vous avez à
bind
classes seulement si elles dépendent des interfaces. Si vous spécifiez une classe particulière, la réflexion va faire le travail pour vous. la documentationLa seule façon dont cela fonctionne, est de définir la valeur par défaut valeur du deuxième paramètre. Dans les autres cas, la syntaxe exception sera levée.
Cela va fonctionner, mais qui fait sens?
Laravel ne peut pas faire de la magie à ce niveau que votre erreur de codage est tout simplement une erreur de syntaxe PHP. Vous êtes indiquant que le deuxième paramètre est de type
Plan
, qui rend obligatoire implicitement. Laravel ne peut pas "patch" de simples appels de fonction comme ceci.Votre confusion est probable que, en fonction de votre routage, Laravel peut injecter la bonne
Plan
paramètre dans lecreate
méthode de contrôleur, vous permettant ainsi de transférer dans le service.