Bagaimana untuk memulakan fungsi yang diberikan dalam pengawal Laravel
P粉404539732
P粉404539732 2024-01-10 16:51:22
0
1
302

Saya mahu memulakan pembolehubah tertentu dan menggunakannya semula dalam kelas tanpa perlu menulis semula keseluruhan kod berulang kali dalam kelas.

$profileInfo = Profile::with('address')->where('id', '=', '1')->get();

Pembolehubah di atas adalah yang saya ingin gunakan semula.

Saya cuba menggunakan constructor

protected $profileInfo;

public function __construct(Profile $profileInfo){
   $this->profileInfo = Profile::with('address')->where('id', '=', '1')->get();
}
public function index($profileInfo){
  $this->profileInfo;
  dd($profileInfo);
}

Tetapi apabila saya memuatkan paparan bilah dalam pelayar saya mendapat Too少的参数到函数 AppHttpControllersProfileController::index(), 0 Passed .

Tolong bantu?

P粉404539732
P粉404539732

membalas semua(1)
P粉627027031

Anda menghadapi masalah kerana anda mengelirukan konsep. Suntikan kebergantungan, pembolehubah contoh tempatan, dan mungkin pengikatan model laluan atau pengikatan pembolehubah laluan.

Suntikan kebergantungan memerlukan Laravel untuk memberikan anda contoh kelas. Dalam situasi di mana Laravel memuatkan sesuatu, ia biasanya akan cuba mengisi yang tidak diketahui menggunakan DI. Untuk pembina, anda meminta Laravel untuk menyediakan pembina dengan nama pembolehubah $profileInfo 下的 Profile contoh baharu kelas. Anda tidak akan menggunakan pembolehubah ini dalam pembina, jadi tidak perlu memintanya di sini.

Seterusnya (masih dalam pembina) tetapkan pembolehubah setempat profileInfo dan tetapkan ia kepada contoh kelas pengawal.

Teruskan apabila laluan cuba mencetuskan index 方法时,存在 $profileInfo permintaan berubah. Laravel tidak tahu apa ini dan ia tidak sepadan dengan apa-apa dalam laluan (lihat Pengikatan Model Laluan dalam dokumentasi). Oleh itu, anda mendapat mesej "Terlalu sedikit parameter". Jika pembolehubah ini tidak wujud, anda sepatutnya menetapkan profileInfo sebelum ini.

Jika anda ingin mengekalkan pembolehubah setempat, anda boleh melakukan ini:

protected $profileInfo;

public function __construct(){
   $this->profileInfo = Profile::with('address')->where('id', '=', '1')->get();
}
public function index(){
  dd($this->profileInfo);
}

Ini satu lagi cadangan untuk anda pertimbangkan...

Memandangkan ini dipanggil profil, nampaknya kita harus meminta model pengguna untuk rekod profil yang sesuai.

// 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);
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan