Метод PUT не поддерживается для этого маршрута - PullRequest
0 голосов
/ 04 июля 2019

Я не могу отправить информацию формы для сохранения функции в контроллере laravel. В форме необходимо создать новый профиль для зарегистрированного пользователя.

Я даже пересоздал проект и переделал форму - вернувшись в обычный html, я подозреваю, что функции laravelCollective могут вызывать его, но все равно та же ошибка. Я даже переставил атрибуты формы, как предложено в другом посте / теме.

Я даже пересоздал проект и переделал форму - вернувшись в обычный HTML, я подозреваю, что функции laravelCollective могут вызывать его, но все равно та же ошибка. Я даже переставил атрибуты формы, как предложено в другом посте / теме.

Форма:

< form method="POST" enctype="multipart/form-data" action="{{ url('users/profile') }}" accept-charset="UTF-8" >
    @csrf
...
// input fields here
...
< /form >

Маршруты:

    Route::resource('users/profile', 'ProfileController');

    Route::get('/home', 'HomeController@index')->name('home');

    Route::resource('users', 'UserController');
    Route::post('users/profile', 'ProfileController@store')->name('profile.store');

Функция ProfileController @ store: // некоторый код опущен

    public function store(Request $request)
    {

        $this->validate($request, [
            'firstname'=>'required',
            'lastname'=>'required', 
            ...
            'desc'=>'required'
        ]);


        //handle file upload
        if($request->hasFile('cover_image')) {
            //Get file name with extension
            $fileNameWithExt = $request->file('cover_image')->getClientOriginalName();
            //Just file name

            $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME);

            //Just Ext
            $ext = $request->file('cover_image')->getClientOriginalExtension();

            //FileName to Store
            $fileNameToStore = $fileName.'_'.time().'_'.$ext;
            //upload image 
            $path = $request->file('cover_image')->storeAs('public/users/'.auth()->user()->id.'cover_images/'.$request->input('firstname').'_'.$request->input('lastname').'_'.auth()->user()->id.'/',$fileNameToStore);


        } else {
            $fileNameToStore = 'noimage.jpg';
        }
        /*
        */

        $profile = new Profile;
        $profile->firstname = $request->input('firstname');
        $profile->lastname = $request->input('lastname');
        ...
        $profile->desc = $request->input('desc');
        $profile->save();
        return redirect('/users/profile');//->with('success','Profile Created');
    }

Знаменитая ошибка:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Метод PUT не поддерживается для этого маршрут. Поддерживаемые методы: GET, HEAD, POST.

Не уверен, что является причиной ошибки, помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 04 июля 2019

Если я правильно понимаю, это для функции магазина, верно?тогда вам не нужно указывать @method('PUT') внутри формы, это должно быть POST.Маршрут магазина в ресурсе - POST.

. Это ваш код, который я удалил @method('PUT')

< form method="POST" enctype="multipart/form-data" action="{{ url('users/profile') }}" accept-charset="UTF-8" > 
@csrf ... 
// input fields here ... 
< /form >

The Routes: Route::resource('users/profile', 'ProfileController');

Route::get('/home', 'HomeController@index')->name('home');

Route::resource('users', 'UserController'); Route::post('users/profile', 'ProfileController@store')->name('profile.store');

, а метод PUT используется для обновления.При обновлении в контроллере вам нужно передать в форму идентификатор, который должен выглядеть следующим образом.

< form method="POST" enctype="multipart/form-data" action="{{ url('users/profile', $data->id) }}" accept-charset="UTF-8" >
@method('PUT') 
@csrf ... 
// input fields here ... 
< /form >

Надеюсь, это поможет!

0 голосов
/ 04 июля 2019

у вас есть проблема в вашем файле маршрутов, просто измените ваш маршрут редактирования на этот маршрут

Route::match(['put', 'patch'], 'the path you want /{id}','controllername@functionname');

вы должны заметить, что если вы новичок в laravel, вы должны передать идентификатор этому маршруту, как показано в этой части {id} , чтобы ваша функция редактирования могла отображать предыдущие данные, а также, если вы хотите отправить форму, она должна иметь метод put, а базовые формы html не поддерживают это, поэтому вам следуетнайдите способ отправить его, например, используя laravel коллективный или, возможно, добавьте скрытый метод в форму , если он не работает, пожалуйста, позвоните мне

0 голосов
/ 04 июля 2019

При использовании метода ресурса Laravel на маршруте, он делает вещи довольно конкретными с точки зрения того, что он ожидает.Если вы посмотрите на таблицу в руководстве , , то он ищет URI с идентификатором элемента обновления, возвращенным как часть URI.Пример выглядит так: /photos/{photo}.Я не уверен, что именно так вы структурировали свою HTML-форму.

Вы сказали, что использовали LaravelCollective, чтобы заставить это работать.Обычно это работает нормально и имеет огромное преимущество в виде простого связывания модели с формой.Но это помогает включить именованный маршрут, который включает «обновление» для ресурса обновления.Например:

{!! Form::model($yourModel, array('route' => array('yourRoute.update', 
                  $yourModel->id), 'method'=>'PUT', 'id'=>'Form'))!!}

У меня не было проблем с Коллективом, использующим этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...