当方法更改为 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

在 AXIOS 中为 GET 方法发送请求正文会引发错误

错误:此路由不支持 POST 方法。支持的方法:GET、HEAD。 - 使用 laravel livewire

此路由不支持 post 方法

此路由不支持 GET 方法。支持的方法:POST。在插入/存储