当方法更改为 GET 路由不像 POST 方法 Laravel 那样工作
Posted
技术标签:
【中文标题】当方法更改为 GET 路由不像 POST 方法 Laravel 那样工作【英文标题】:When method changed to GET route not working like POST method Laravel 【发布时间】:2021-06-30 16:49:25 【问题描述】:我有一个搜索栏:
!! Form::open(['name' => 'myForm',
'method' => 'GET',
'action' => 'AreaController@search',
'files' => true,
'onsubmit' => "return validateForm()"])
!!
!! Form::submit('جستجو', ['class' => 'btn btn-info']) !!
!! Form::close() !!
在路由文件中,web.php
:
Route::get('area/search/', 'AreaController@search')->name('area.search');
AreaController
:
public function search(Request $request)
return " it is working" ;
但是当我点击按钮时,浏览器显示一个空白页面。当我使用POST
方法时,它可以工作,但是如果我更改为GET
方法,它就不起作用了。
谢谢。
【问题讨论】:
我想这是一个 LaravelCollective 形式?在使用'action'=>'AreaController@search'
时,不确定您的路线是否被击中。此外,您的帖子设置为接受文件上传'files'=>true
...所以您的方法必须是 POST
我删除了 'files'=>true 而不是 'action'=>'AreaController@search' 使用了 'route' => ['area.search'] 但仍然无法正常工作
当我将路线从区域/搜索/更改为区域搜索时。成功了!!!
【参考方案1】:
对于 Post Method,你需要在表单中添加 CSRF Token
!! Form::open(['method' => 'POST']) !! <--------- Change to POST method
!! Form::token() !! <----------- Add this line
!! Form::submit('جستجو', ['class' => 'btn btn-info']) !!
!! Form::close() !!
Route::post('area/search/', 'areacontroller@search')->name('area.search');
或
如果您不想将 CSRF Token 添加到表单中,您可以将其添加到路由文件中。
将 CSRF 过滤器附加到路由
Route::post('profile', array('before' => 'csrf', function()
//
));
更多详情可以参考https://laravel.com/docs/4.2/html
【讨论】:
以上是关于当方法更改为 GET 路由不像 POST 方法 Laravel 那样工作的主要内容,如果未能解决你的问题,请参考以下文章
在 spring 控制器的重定向中将请求方法从 POST 更改为 GET
如何将 Apigee 的跟踪控制台 HTTP 方法更改为 POST