PHP逻辑不是什么预期

时间:2016-01-10 00:34:44

标签: php laravel laravel-5 laravel-validation

我正在为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" } }

1 个答案:

答案 0 :(得分:2)

传递给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"

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