Comment initialiser une fonction donnée dans le contrôleur Laravel
P粉404539732
P粉404539732 2024-01-10 16:51:22
0
1
316

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粉404539732
P粉404539732

répondre à tous(1)
P粉627027031

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);
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal