我在Laravel上有点新鲜。我已经为GET和POST创建了一些路由,但唯一可行的是GET路由。即使内部进程和数据库查询正确执行,POST总是返回TokenMismatchException。我在SO上看到的一些问题通常都在谈论AJAX,解决方案涉及发送令牌。但是我还没有使用任何AJAX ......通常答案说如果我使用普通的POST表单,Laravel会插入一个隐藏的令牌。
这是路线代码:
Route::post('/practice/{level_id?}/{group_id?}/{command?}', 'WebController@practice');
Route::get('/practice/{level_id?}/{group_id?}/{command?}', 'WebController@practice');
以下是我在网络控制器上收到它的方式:
public function practice($level_id = "", $group_id = "", $command = "")
有什么问题吗?什么可能使我的POST请求失败?感谢。
答案 0 :(得分:1)
请在表单中添加隐藏字段。如果您使用的是Laravel表单构建器,那么当您执行Form::open()
时,它会自动为表单添加隐藏的令牌字段。
尝试使用这样的东西:
<input name="_token" type="hidden" value="{{ csrf_token() }}">
答案 1 :(得分:1)
如果您使用的是Form::open
方法,而新版本的Laravel没有这个方法,则必须从here安装,然后才会出现TokenMismatchException问题。但是,如果您使用的是HTML5表单标记,那么您需要在HTML表单中添加{{ csrf_field() }}
,这将生成
<input type="hidden" name="_token" value="53sfsffxth7AYe4RFSjzaPf2ygLCecJhbkhblah">