PHP逻辑不是预期的


PHP Logic Not What is Expected

我正在为我的Laravel 5.1站点添加条件验证。实际的验证是有效的,但我的逻辑似乎从来没有像预期的那样有效。

我的表单上有三个复选框,选中时每个复选框都应提供值true。这毫无问题。

这个问题在我的验证中,如下面的代码所示。无论复选框是否选中,测试始终返回false。我有下面的代码验证器。

$validator->sometimes('email', 'required|email|max:255|unique:members,email', function($request) {
            return $request->input('email_newsletter') === 'true';
        });

更新:以下是选中电子邮件复选框的var_dump($request->input('email_newsletter'));的完整输出:

    object(Illuminate'Support'Fluent)#205 (1) { ["attributes":protected]=> array(8) { ["_token"]=> string(40) "arWeDoYSBUPDh6TnD2CI7xPbg5xfG4lyiCFjh1ZF" ["name"]=> string(0) "" ["email"]=> string(0) "" ["phone"]=> string(0) "" ["email_newsletter"]=> string(4) "true" ["text_message"]=> string(5) "false" ["call_message"]=> string(5) "false" ["input"]=> string(16) "email_newsletter" } }

传递给Closure进行验证的参数是包含输入的Illuminate'Support'Fluent对象,而不是Illuminate'Http'Request对象。您只需直接作为属性访问信息,而无需调用任何方法:

$validator->sometimes('email', 'required|email|max:255|unique:members,email', function($input) {
    return $input->email_newsletter === 'true';
});

之前,当您使用语句$request->input('email_newsletter')时,所做的只是将对象上的input属性设置为'email_newsletter',然后返回Fluent对象,然后在比较中使用该对象。您可以在添加的转储中看到这一点,数组中的最后一个属性是["input"]=> string(16) "email_newsletter"

你可以在这里阅读文档。该部分末尾的红色框表示传递到闭包中的对象。

相关文章:
  • 没有找到相关文章