Как использовать один и тот же код для создания и редактирования данных в контроллере?

В 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 для обновления) и добавляя/изменяя параметры маршрутов и форм. Это помогает упростить разработку и обеспечить однородность кода.