Rumah > Soal Jawab > teks badan
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粉6270270312024-01-11 14:11:54
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); }