添加令牌到视图使laravel

时间:2017-02-28 09:43:46

标签: php laravel laravel-4.2

我有这样的链接:令牌:

<a href="{{ URL::to('/users/submit/' . $id->id) }}?_token={{ csrf_token() }}">Submit New</a>

生成网址:

  

http://example.com/users/submit/20?_token=fpf0LwHyf0JGBg0fnixjRFo1B5GgUM3RDp6dVgUU

现在在我的控制器中,我添加了条件,检查数据库中的一列,并根据此返回不同的视图。

public function wrongIdSubmit($Id) {

    $submits = self::$user->where('submit_id', $Id)->first();

    if (!$txid) {
        App::abort(404);
    }       

    if($submits->submit_id > 3) {
        return View::make('fail',[              
            'submits' => $submits               
        ]);         
    }

    else {
        return View::make('submit',[            
            'submits' => $submits           
        ]);
    }
}

我的问题是如何传递此标记?_token={{ csrf_token() }}以返回View :: make以及$ submits变量?因为现在我已经犯了错误

  

production.ERROR:Illuminate \ Session \ TokenMismatchException

2 个答案:

答案 0 :(得分:2)

您必须将令牌添加到表单本身。您无法在URL中传递它。将以下内容添加到表单中:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

答案 1 :(得分:2)

Laravel提供函数,返回带有标记的直接输入隐藏字段。

csrf_field()

它将生成一个包含CSRF令牌值的HTML隐藏输入字段。

所以你可以尝试这样:

return View::make('fail',[              
   'submits' => $submits,
   'token' => csrf_field()               
]); 

并且只是打印:

{!! $token !!}

或直接也喜欢:

{!! csrf_field() !!}

out put就像:

<input type="hidden" name="_token" value="*****" />

祝你好运..