В Laravel для создания и редактирования данных в контроллере можно использовать один и тот же код, следуя некоторым принципам.
1. Создайте маршруты для обработки запросов создания и обновления данных. В файле web.php
добавьте следующие маршруты:
Route::get('items/create', 'ItemController@create')->name('items.create'); Route::post('items', 'ItemController@store')->name('items.store'); Route::get('items/{id}/edit', 'ItemController@edit')->name('items.edit'); Route::put('items/{id}', 'ItemController@update')->name('items.update');
2. Создайте контроллер ItemController
с методами create
, store
, edit
и update
:
namespace AppHttpControllers; use IlluminateHttpRequest; use AppModelsItem; class ItemController extends Controller { public function create() { return view('items.create'); } public function store(Request $request) { // Валидация данных $data = $request->validate([ 'name' => 'required', 'description' => 'required', // другие поля ]); // Создание нового объекта Item $item = Item::create($data); // Редирект на страницу просмотра созданного объекта return redirect()->route('items.show', $item->id); } public function edit($id) { $item = Item::findOrFail($id); return view('items.edit', compact('item')); } public function update(Request $request, $id) { // Валидация данных $data = $request->validate([ 'name' => 'required', 'description' => 'required', // другие поля ]); $item = Item::findOrFail($id); // Обновление данных объекта Item $item->update($data); // Редирект на страницу просмотра обновленного объекта return redirect()->route('items.show', $item->id); } }
3. Создайте представления create.blade.php
и edit.blade.php
для отображения формы создания и редактирования данных. В этих представлениях вы можете использовать один и тот же код для отображения полей и кнопок сохранения.
<!-- create.blade.php --> <form action="{{ route('items.store') }}" method="POST"> @csrf <!-- поля для создания данных --> <input type="text" name="name" required> <textarea name="description" required></textarea> <!-- другие поля --> <button type="submit">Сохранить</button> </form> <!-- edit.blade.php --> <form action="{{ route('items.update', $item->id) }}" method="POST"> @csrf @method('PUT') <!-- поля для редактирования данных --> <input type="text" name="name" value="{{ $item->name }}" required> <textarea name="description" required>{{ $item->description }}</textarea> <!-- другие поля --> <button type="submit">Сохранить</button> </form>
Таким образом, вы можете использовать один и тот же код в контроллере для создания и редактирования данных, просто меняя методы запроса (POST для создания и PUT для обновления) и добавляя/изменяя параметры маршрутов и форм. Это помогает упростить разработку и обеспечить однородность кода.