Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk memulakan fungsi yang diberikan dalam pengawal Laravel

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粉404539732P粉404539732304 hari yang lalu289

membalas semua(1)saya akan balas

  • P粉627027031

    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);
    }
    

    balas
    0
  • Batalbalas