Rumah > Artikel > rangka kerja php > Apa yang salah dengan penambahan baru laravel dan ketidakupayaan untuk mengeditnya?
Baru-baru ini, semasa membangunkan projek menggunakan rangka kerja Laravel, saya menemui masalah: data yang baru ditambah tidak boleh diedit. Selepas penyelesaian masalah dan analisis lanjut, saya menemui masalah itu dan menyelesaikannya. Izinkan saya berkongsi beberapa idea penyelesaian di bawah.
Pertama sekali, kita perlu menjelaskan konsep - kaedah permintaan HTTP. Kaedah permintaan HTTP merujuk kepada kaedah yang digunakan oleh klien apabila meminta sumber daripada pelayan, termasuk GET, POST, PUT, DELETE, dsb. Antaranya, kaedah GET digunakan untuk mendapatkan sumber, kaedah POST digunakan untuk mencipta sumber, kaedah PUT digunakan untuk mengemaskini sumber, dan kaedah DELETE digunakan untuk memadam sumber.
Dalam Laravel, apabila menggunakan penyerahan borang, kaedah permintaan lalai ialah POST, contohnya:
<form action="/user" method="POST"> <input type="text" name="name"> <button type="submit">提交</button> </form>
Kemudian, kami menggunakan kaedah store
dalam pengawal untuk mengendalikan permintaan ini:
public function store(Request $request) { $user = new User; $user->name = $request->input('name'); $user->save(); return redirect('/user'); }
Dalam kod di atas, kami mencipta objek Pengguna baharu, tetapkan medan nama yang diserahkan oleh borang kepada atribut nama objek Pengguna, kemudian simpan data dan ubah hala ke halaman /user
.
Walau bagaimanapun, kod di atas kadangkala menghadapi masalah: data yang baru ditambah tidak boleh diedit. Apabila kami mengakses halaman edit, kami akan mendapati bahawa tiada maklumat data asal yang dibuat dalam halaman tersebut. kenapa ni? Mula-mula kita boleh melihat kod halaman edit:
<form action="/user/{{ $user->id }}" method="POST"> {{ method_field('PUT') }} <input type="text" name="name" value="{{ $user->name }}"> <button type="submit">提交</button> </form>
Dalam kod ini, kami menggunakan kaedah method_field
untuk menentukan kaedah permintaan sebagai PUT, kerana dalam protokol HTTP, pengemaskinian sumber memerlukan kaedah PUT. Walau bagaimanapun, dalam rangka kerja Laravel, permintaan POST lalai tidak dapat mengenali permintaan PUT Oleh itu, apabila mengakses halaman edit, Laravel akan memprosesnya mengikut permintaan POST lalai dan bukannya permintaan PUT yang kami jangkakan.
Terdapat dua idea untuk menyelesaikan masalah ini: satu ialah menggunakan kaedah permintaan PUT untuk mencipta data; satu lagi ialah menggunakan parameter _method
untuk menentukan kaedah permintaan apabila menggunakan kaedah POST untuk mencipta data .
Penyelesaian pertama ialah kaedah yang lebih mudah, tetapi ia memerlukan lebih banyak perubahan kod. Kita perlu menggunakan kaedah permintaan PUT dalam bentuk:
<form action="/user/{{ $user->id }}" method="POST"> {{ method_field('PUT') }} <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="text" name="name" value="{{ $user->name }}"> <button type="submit">提交</button> </form>
Kemudian, kendalikan permintaan PUT dalam pengawal:
public function update(Request $request, $id) { $user = User::findOrFail($id); $user->name = $request->input('name'); $user->save(); return redirect('/user'); }
Menggunakan kaedah ini, kita perlu menentukan kaedah dalam bentuk kaedah PUT, dan perlu lulus parameter _token untuk mengelakkan serangan CSRF, yang akan meningkatkan banyak beban kerja kod.
Penyelesaian kedua adalah lebih mudah. Kita perlu menggunakan kaedah POST dalam borang, tetapi tambahkan parameter _method apabila menyerahkan untuk menentukan kaedah permintaan sebagai PUT:
<form action="/user/{{ $user->id }}" method="POST"> <input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="text" name="name" value="{{ $user->name }}"> <button type="submit">提交</button> </form>
Kemudian, apabila memproses permintaan POST dalam pengawal, gunakan method
kaedah untuk Mengenal pasti permintaan PUT:
public function update(Request $request, $id) { $user = User::findOrFail($id); $user->name = $request->input('name'); $user->save(); return redirect('/user'); }
Menggunakan kaedah ini, kita hanya perlu menambah parameter _method pada borang, yang lebih mudah dibaca dan memerlukan usaha pengekodan yang kurang.
Dalam proses membangunkan projek Laravel, tidak dapat dielakkan untuk menghadapi masalah Menyelesaikan masalah memerlukan kesabaran dan keprihatinan kita, serta pemahaman yang mendalam dan penguasaan rangka kerja dan teknologi. Saya harap artikel ini dapat memberi sedikit rujukan dan bantuan kepada pembaca.
Atas ialah kandungan terperinci Apa yang salah dengan penambahan baru laravel dan ketidakupayaan untuk mengeditnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!