如何使用资源路由定义修复错误

时间:2019-01-10 06:03:43

标签: laravel-5 routes

这里https://laravel.com/docs/5.7/controllers#resource-controllers我读到定义资源 我有发布/发布方法:

POST    /photos store   photos.store
...
PUT/PATCH   /photos/{photo} update  photos.update

但在routes / web.php中定义下一个资源路由:

Route::resource('site-subscriptions', 'Admin\SiteSubscriptionsController', [ 'except' => [] ] )->middleware('WorkTextString');

具有表单定义:

   <form method="POST" action="http://local-votes.com/admin/site-subscriptions/store" accept-charset="UTF-8" id="form_site_subscription_edit" enctype="multipart/form-data">
            <input type="hidden" name="_token" value="X7rzFjRq4o4TeA67FmkQTMI9ApjygM3ovE1C14i2">

我在POST时出错:

  "message": "",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException",
    "file": "/mnt/_work_sdb8/wwwroot/lar/votes/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php",
    "line": 255,

我的web.php定义错误吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用的是Blade,则以这种方式获取工作链接很不好,您应该使用如下所示的laravel帮助器:

<form method="POST" action="{{route('site-subscriptions.store')}}" accept-charset="UTF-8" id="form_site_subscription_edit" enctype="multipart/form-data">

这样,即使您在部署中更改APP_URL,也可以确保链接正确无误。

实际完成的工作是调用route帮助函数,以通过路由名称为您获取URL。

来自docs

  

route()

     

route函数为给定的命名路由生成一个URL:

     

$ url = route('routeName');   如果路由接受参数,则可以将它们作为方法的第二个参数传递给

     

$ url = route('routeName',['id'=> 1]);   默认情况下,路由功能会生成一个绝对URL。如果您希望生成一个相对URL,则可以将false作为第三个参数传递:

     

$ url = route('routeName',['id'=> 1],false);