Maison > Questions et réponses > le corps du texte
Je souhaite initialiser une variable spécifique et la réutiliser dans la classe sans avoir à réécrire tout le code encore et encore dans la classe.
$profileInfo = Profile::with('address')->where('id', '=', '1')->get();
Les variables ci-dessus sont ce que je souhaite réutiliser.
J'ai essayé d'utiliser le constructeur
protected $profileInfo; public function __construct(Profile $profileInfo){ $this->profileInfo = Profile::with('address')->where('id', '=', '1')->get(); } public function index($profileInfo){ $this->profileInfo; dd($profileInfo); }
Mais lorsque je charge la vue lame dans le navigateur, j'obtiens Too少的参数到函数 AppHttpControllersProfileController::index(), 0 Passed
.
S'il vous plaît, aidez-moi ?
P粉6270270312024-01-11 14:11:54
Vous êtes en difficulté parce que vous confondez les concepts. Injection de dépendances, variables d'instance locales et éventuellement liaison de modèle de route ou liaison de variable de route.
L'injection de dépendances nécessite que Laravel vous fournisse une instance d'une classe. Dans les situations où Laravel charge quelque chose, il essaiera généralement de remplir les inconnues à l'aide de DI. Pour les constructeurs, vous demandez à Laravel de fournir au constructeur le nom de la variable $profileInfo
下的 Profile
une nouvelle instance de la classe. Vous n'utiliserez pas cette variable dans le constructeur, il n'est donc pas nécessaire de la demander ici.
Ensuite (toujours dans le constructeur), définissez la variable locale profileInfo
et attribuez-la à l'instance de classe de contrôleur.
Continuez lorsque l'itinéraire tente de déclencher la demande de variable index
方法时,存在 $profileInfo
. Laravel n'a aucune idée de ce que c'est et cela ne correspond à rien dans la route (voir Route Model Binding dans la documentation). Par conséquent, vous obtenez le message « Trop peu de paramètres ».
Si cette variable n'existe pas, vous devriez avoir défini le profileInfo
auparavant.
Si vous souhaitez conserver les variables locales, vous pouvez faire ceci :
protected $profileInfo; public function __construct(){ $this->profileInfo = Profile::with('address')->where('id', '=', '1')->get(); } public function index(){ dd($this->profileInfo); }
Voici une autre suggestion à considérer...
Puisque cela s'appelle un profil, il semble que nous devrions demander au modèle utilisateur l'enregistrement de profil approprié.
// in your user model, set up a relationship public function profile(){ return $this->hasOne(Profile::class); } // In controller, if you're getting a profile for the logged in user public function index(){ $profile = Auth::user()->profile; dd($profile); } // In controller, if you're getting profile for another user via route model binding public function index(User $user){ $profile = $user->profile; dd($profile); }