此路线不支持PUT方法

时间:2019-07-03 23:48:29

标签: laravel forms laravel-5

我无法通过提交表单信息来将函数存储在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 \组件\ HttpKernel \异常\   MethodNotAllowedHttpException为此不支持PUT方法   路线。支持的方法:GET,HEAD,POST。

不确定导致错误的原因,请多加帮助。

3 个答案:

答案 0 :(得分:1)

如果我正确理解,这是针对存储功能的吗?那么您不必将version: '3' # specify docker-compose version services: angular: # name of the first service build: ./ # specify the directory of the Dockerfile ports: - "4200:80" # maps port 4200 on localhost to 80 in container network: - mynetwork depends_on: - "express" express: # name of the second service build: # specify the directory of the Dockerfile context: ./ dockerfile: dockerfile.be ports: - "8000:8000" # maps port 8000 on localhost to 8000 in container networks: - mynetwork networks: mynetwork:放在表单中就可以发布了。资源中的存储路径为POST。

这是您删除了@method('PUT')

的代码
@method('PUT')

和PUT方法用于更新。在控制器中更新时,您需要在表单中传递看起来像这样的ID。

< 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');

希望对您有帮助!

答案 1 :(得分:0)

在路线上使用Laravel资源方法时,它会使事情变得更加具体。如果您查看manual,上的图表,它正在寻找一个uri,其更新元素ID作为uri的一部分返回。该示例如下所示:/photos/{photo}。我不确定这就是您构造html表单的方式。

您说过您正在使用LaravelCollective来完成这项工作。这通常可以正常工作,并且具有易于进行表单模型绑定的巨大优势。但是,这有助于包括命名路由,其中​​包括更新资源的“更新”。例如:

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

使用此方法,我对Collective没有任何疑问。

答案 2 :(得分:0)

您的路线文件有问题,只需将您的编辑路线更改为此路线

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

您应该注意,如果您不熟悉laravel,则应将ID传递到此路由,如本部分 {id} 所示,以便您的编辑功能可以显示其以前的数据,并且如果您要提交表单,则应具有put方法,而html基本表单不支持该表单,因此您应该找到一种提交方法,例如使用 laravelcollection 或放置您表单中的隐藏方法 如果它不起作用,请给我打电话