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?
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 menetapkanprofileInfo
sebelum ini.Jika anda ingin mengekalkan pembolehubah setempat, anda boleh melakukan ini:
Ini satu lagi cadangan untuk anda pertimbangkan...
Memandangkan ini dipanggil profil, nampaknya kita harus meminta model pengguna untuk rekod profil yang sesuai.