Маршрут Laravel post с параметрами url

Я стою перед большой стеной маршрутизации личинок, и я не могу найти решение

у меня есть эта форма в шаблоне вида

<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'); поскольку он, похоже, не принимает параметры url, когда метод установлен в post.

i.e он выдает ошибку

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 handles также получают, но, похоже, это не работает.

3 ответов


проблема не имеет ничего общего с Laravel

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

заменить url С action

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

команда HTTP POST не принимает параметры из URL-адреса, например GET, она принимает их из тела HTTP POST. Чтобы получить параметры post, вы используете код ниже:

в маршрутах.на PHP:

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

и в вашем PagesController доступ к форме ввода с помощью одного из методов ввода, таких как ниже

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

вы не можете отправить параметры get в маршрут post.

но вы можете достичь этого простым трюком, просто передайте свое значение ({{$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"
          }