我在尝试POST查询表单时收到Laravel错误“RouteCollection.php第x行中的MethodNotAllowedHttpException”

时间:2017-06-26 03:28:08

标签: php forms laravel post blade

这只是一个查询表单。我搜索了这个问题并尝试了我找到的许多解决方案,但没有一个解决了这个问题。

Laravel版本: 5.4.23 。使用 Blade 模板引擎。

我的路线:

Route::post('products/search', 'ProductsController@search');

我的表单:

{{Form::open(['url' => ['products/search']])}}
    {{Form::text('search', $search)}}
    {{Form::submit('Search')}}
{{Form::close()}}

我的控制器:

class ProductsController extends Controller
{
    ...

    public function search(Request $request) {
        dd('This point is never reached.');
        return view(...
    }
}

备注:

我尝试将路线更改为Route::get,但没有奏效。试图将我的表单方法更改为GET,如{{Form::open(['method' => 'GET', 'url' => ['products/search']])}},但没有成功。

3 个答案:

答案 0 :(得分:0)

所以问题可能是:

<强>解决方法1 即可。你可以在其上定义另一条路线,例如:Route::get('products/{wildcard}', 'Controller'},在这种情况下,请确保将所有其他路线放在您尝试开始工作的路线下。

<强>溶液2

继续并删除控制器。然后运行composer dump-autoload

然后在命令行php artisan make:controller UserController上运行该命令,然后粘贴您拥有的配置文件方法。

解决方案3 您可能已缓存路线,所以:php artisan route:clear

解决方案4 。将网址更改为

{{ Form::open(array('url' => 'foo/bar')) }}
    //
{{ Form::close() }}

答案 1 :(得分:0)

我不知道框架,但为什么形式为数组的url值?

我原以为你想要像

这样的东西
Form::open(['url' => 'products/search'])

根据文档,默认表单方法为POST,因此您应将路由保持为Route::post。如果您想将方法更改为GET(我建议您进行搜索操作),只需使用Route::get

Form::open(['url' => 'products/search', 'method' => 'get'])

似乎你也可以通过action属性使用命名路由名称甚至控制器方法,即

Form::open(['action' => 'ProductsController@search'])

答案 2 :(得分:0)

我认为您需要更改刀片文件,如:

{{Form::open(['url' => ['products/search']])}}

TO

{{Form::open(['url' => 'products/search'])}}

OR 您可以在路线中添加路线名称,如:

Route::post('products/search', 'ProductsController@search')->name('products.search');


{{ Form::open(['route' => 'products.search', 'method' => 'post']) }}

希望这能帮到你