PHP 逻辑不符合预期
PHP Logic Not What is Expected
我正在向我的 Laravel 5.1 站点添加条件验证。实际验证有效,但我的逻辑似乎从未按预期工作。
我的表单上有三个复选框,每个复选框在选中时都应提供 true
的值。这没有问题。
问题出在我的验证中,如下面的代码所示。无论复选框是否选中,测试总是 returns 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'
,然后 returns Fluent
对象,然后用于比较。您可以在添加的转储中看到这一点,数组中的最后一个属性是 ["input"]=> string(16) "email_newsletter"
.
您可以阅读文档 here。该部分末尾的红色框表示传递到闭包中的对象。
我正在向我的 Laravel 5.1 站点添加条件验证。实际验证有效,但我的逻辑似乎从未按预期工作。
我的表单上有三个复选框,每个复选框在选中时都应提供 true
的值。这没有问题。
问题出在我的验证中,如下面的代码所示。无论复选框是否选中,测试总是 returns 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'
,然后 returns Fluent
对象,然后用于比较。您可以在添加的转储中看到这一点,数组中的最后一个属性是 ["input"]=> string(16) "email_newsletter"
.
您可以阅读文档 here。该部分末尾的红色框表示传递到闭包中的对象。