Laravel 8 CRUD: метод «POST» не работает, несмотря на правильную маршрутизацию и конфигурацию HTML

#php #html #mysql #laravel #crud

#php #HTML #mysql #laravel #crud

Вопрос:

Когда я отправляю свою пользовательскую форму, ничего не происходит: я не понимаю, почему ничего не происходит. Если я изменю метод «POST» на «PUT», он перенаправит меня только на страницу индекса. Пожалуйста, помогите. Спасибо. Маршрут CRUD:

 use IlluminateSupportFacadesRoute;
use AppHttpControllersPostsController;
Route::resource('posts', PostsController::class);
 

Функция сохранения в PostsController:

 public function store(Request $request)
{
    $request->validate([
        'Product1' => 'required',
    ]);

    $post = new Posts();
    $post->Product1= $request->Product1;
    $post->save();
    
    return redirect()->route('posts.index')->with('success', 'Post created successfully');
    
}
 

HTML-форма:

 <form method="POST" action="{{ route('posts.store') }}" enctype="multipart/form-data">
    @csrf   
    <table class="table" style="border-style: none;">
        <tr>
            <th>{{ __('Product1:') }}</th>
            <td><input type="text" name="Product1" class="form-control"></td>
        </tr>

        <tr>
            <td colspan="2">
                <input type="submit" class="btn btn-primary">
            </td>
        </tr>
    </table>
</form>
 

Комментарии:

1. вы проверяли в исходном коде браузера, правильно ли сгенерировано действие формы?

2. Как? Вы имеете в виду в консоли браузера? ничего не происходит.

Ответ №1:

Добро пожаловать в SO

ваш код неверен

 <input type="text" name="title" class="form-control">
 

здесь name важен атрибут, он создает ключ, который затем попадает в серверную часть для этого кода $request->title , который вы получите в своем контроллере

но ваш код должен быть таким

 <form method="POST" action="{{ route('posts.store') }}" enctype="multipart/form-data">
    @csrf   
    <table class="table" style="border-style: none;">
        <tr>
            <th>{{ __('Product1:') }}</th>
            <td><input type="text" name="product" class="form-control"></td>
        </tr>

        <tr>
            <td colspan="2">
                <input type="submit" class="btn btn-primary">
            </td>
        </tr>
    </table>
</form>
 

в контроллере

 public function store(Request $request)
{
    $request->validate([
        'product' => 'required',
    ]);

    $post = new Posts();
    $post->Product1= $request->product; // it should be match with input name
    $post->save();
    
    return redirect()->route('posts.index')->with('success', 'Post created successfully');
    
}
 

Комментарии:

1. Спасибо за ответ. Я изменил атрибуты name, но моя проблема связана с методом POST. Когда я нажимаю отправить, ничего не происходит.