【问题标题】:Laravel post route with url parameters带有 url 参数的 Laravel 发布路由
【发布时间】:2015-10-30 14:02:40
【问题描述】:

我面临着一大堵幼虫路线,我似乎找不到解决方案

我在视图模板中有这个表单

<form url="/request/{{$equipment->url}}" method="POST">
                    <div class="row">
                        <div class="col-sm-4">
                            <div class="mt10">Start Date:</div>
                            <input type="date" required name="starting_date" value="" placeholder="From" class="request-input request-date mb10">
                        </div>
                        <div class="col-sm-4">
                            <div class="mt10">End Date:</div>
                            <input type="date" required name="ending_date" value="" placeholder="To" class="request-input request-date mb10">
                        </div>
                        <div class="col-sm-4">
                            <div class="mt10">Quantity</div>
                            <input type="number" required name="quantity" value="" placeholder="Quantity" class="request-input mb10">
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-sm-4">
                            <div class="mt10">Voltage</div>
                            <input type="number" required name="voltage" value="" placeholder="Voltage" class="request-input mb10">
                        </div>
                        <div class="col-sm-4">
                            <div class="mt10">Param 1</div>
                            <input type="text" required name="param_1" value="" placeholder="Parameter" class="request-input mb10">
                        </div>
                        <div class="col-sm-4">
                            <div class="mt10">Param 2</div>
                            <input type="text" required name="param_2" value="" placeholder="Parameter" class="request-input mb10">
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-sm-12">
                            <button class="btn btn-block button-orange">Get quotes now</button>
                        </div>
                    </div>
                </form> 

这是对应的路线

Route::group([ 'middleware' => 'rental'], function(){
 Route::get('/my-requests/{readby_url}', 'PagesController@requests');
 Route::post('/request/{equipment_url}', 'PagesController@request');
 Route::post('/request/create', 'RequestsController@create');
 Route::post('/request/accept', 'RequestsController@accept');
});

我的问题是 Route::post('/request/{equipment_url}', 'PagesController@request'); ,因为当方法设置为 post 时,它似乎不接受 url 参数。

即它抛出错误

MethodNotAllowedHttpException in RouteCollection.php line 201:
in RouteCollection.php line 201
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 188
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 140
at RouteCollection->match(object(Request)) in Router.php line 746
at Router->findRoute(object(Request)) in Router.php line 655
at Router->dispatchToRoute(object(Request)) in Router.php line 631
at Router->dispatch(object(Request)) in Kernel.php line 237

我想同时传递一个参数和发布数据。

有没有办法让它工作?有人告诉我 Route::post 也可以处理 GET,但它似乎不起作用。

【问题讨论】:

    标签: php laravel routing


    【解决方案1】:

    HTTP POST 动词不接受来自 URL 的参数(如 GET),它接受来自 HTTP POST 正文的参数。要获取帖子参数,请使用以下代码:

    在 routes.php 中:

    Route::post('/request', 'PagesController@request');
    

    并在您的 PagesController 中使用以下输入方法之一访问表单输入

    public function request() 
    {
        return Input::get('equipment_url');
    }
    

    【讨论】:

    • 问题是我希望 url 改变并显示设备 URL,这就是我使用路由参数的原因
    • @JadSalhani 那么你将不得不使用 GET
    • 这样做的动机是什么?在我的情况下,将参数作为 URL 的一部分传递会使事情 much 更方便:(
    • 我认为这个答案没有抓住重点。是的,POST 不接受 QUERY STRING 参数,但它接受 URI 段,这就是 OP 发布的路由所使用的。
    【解决方案2】:

    您不能将获取参数发送到发布路由。

    但是您可以通过一个简单的技巧来实现,只需在表单的隐藏字段或会话中传递您的值 ({{$equipment->url}})。

    例如:

    html

    <form url="test/{{$equipment->url}}" method="POST">
        {{Input::hidden('name-of-field', $equipment->url)
        <div class="row">
            .......
        </div>
    </form>
    

    路线

    Route::post('test/{any-variable}', ['as' => 'test', 'uses' => 'TestController@test']);
    

    控制器

    public function test()
    {
        echo "<pre>";
        dd(Input::all());
    }
    

    结果

    array(1) {
               ["name-of-field"]=>
                string(5) "your value here"
              }
    

    【讨论】:

    • 我认为这个答案也没有抓住重点。您不能使用 POST 发送获取参数 (QUERY STRING),但 OP 发布的路由使用 URI 段。 Laravel 很好地解决了它们,所以我没有看到任何问题。
    【解决方案3】:

    问题与 Laravel 无关

    <form url="/request/{{$equipment->url}}" method="POST">
    

    url 替换为action

    <form action="/request/{{$equipment->url}}" method="POST">
    

    【讨论】:

    • Jad 在发布此问题的同一天回答 Jad 的几率是多少
    • 1 万亿到 1。
    • 我阅读此评论并点赞,一年后回来尝试再次点赞,结果发现箭头是橙色的,因为我已经点赞了
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 2019-06-27
    • 2013-09-05
    • 2017-10-21
    • 1970-01-01
    • 2017-07-10
    • 2015-04-17
    • 2016-01-20
    相关资源
    最近更新 更多