【问题标题】:When method changed to GET route not working like POST method Laravel当方法更改为 GET 路由不像 POST 方法 Laravel 那样工作
【发布时间】:2024-01-20 04:31:01
【问题描述】:

我有一个搜索栏:

{!! 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'] 但仍然无法正常工作
  • 当我将路线从区域/搜索/更改为区域搜索时。成功了!!!

标签: php laravel laravel-routing laravel-request


【解决方案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

【讨论】: