【问题标题】:Laravel, Route required parameter is not validating by Form Request ValidationLaravel,Route required 参数未通过表单请求验证进行验证
【发布时间】:2017-03-29 19:58:27
【问题描述】:

我使用的是 laravel 5.4

routes/web.php [路线]

Route::get('/email-confirmation/{token}', ['uses' => 'Components\ConfirmationController@sendEmailConfirmation', 'as' => 'web.email.confirmation']);

组件/ConfirmationController.php [控制器]

public function sendEmailConfirmation(EmailConfirmationRequest $request) 
{
dd($request->input('token'));
// ouput is empty
}

// 我知道,路由所需参数是通过作为第二个参数传入来访问的

EmailConfirmationRequest.php [请求]

public function rules()
{
    return ['token' => 'required|max:3'];
}

网址:/email-confirmation/hello - 未验证

所以,它无法验证请求中的token参数。

我不确定,我做错了什么。

【问题讨论】:

  • 我认为这是因为您正在尝试验证路由参数并且 dd 正在尝试访问请求参数:/email-confirmation/{token} 是路由参数。您可能想通过发布到控制器中的 /email-confirmation/1?token=test 和 dd($request->all()) 来检查这一点
  • 您必须决定是否希望 token 成为路由参数或 GET/POST 输入,在第一种情况下,在 $request 参数之后的操作调用中注入并且您无法验证它,在第二种情况下是在request()->input('token),你可以验证。

标签: laravel validation


【解决方案1】:

正如一些 cmets 已经说过的,您将 $token 作为路由参数而不是输入值传递。

要使用此路由参数,请更新您的方法(添加 $token

public function sendEmailConfirmation(EmailConfirmationRequest $request, $token) 
{
    dd($token);
    // output should be $token value
}

如果您确实想将其作为输入传递,您可以将其添加为表单中的隐藏字段。

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 2016-08-01
    • 2015-10-05
    • 2016-05-23
    • 2016-03-11
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多