在使用 Laravel 进行验证期间检查输入中是不是存在字段

Posted

技术标签:

【中文标题】在使用 Laravel 进行验证期间检查输入中是不是存在字段【英文标题】:Check if field exists in Input during validation using Laravel在使用 Laravel 进行验证期间检查输入中是否存在字段 【发布时间】:2013-07-01 07:12:44 【问题描述】:

我想确保某些字段作为表单的一部分发布,但我不介意某些字段是否为空值。

“必需”验证规则不起作用,因为我很乐意接受空字符串。我尝试了以下方法,但由于从未发送过“address2”字段,因此验证器不会对其进行处理。

有什么想法吗?

$rules = array(
     'address2' => 'attribute_exists'
);



class CustomValidator extends Illuminate\Validation\Validator 

    public function validateAttributeExists($attribute, $value, $parameters)
    
        return isset($this->data[$attribute]);
    

【问题讨论】:

你到底想做什么?您正在检查自定义代码中的 isset,而不是您可以使用 required 吗? 您是否有一组特定的值应该与“address2”匹配? Laravel 有很多验证规则,对于像 address2 这样简单的东西,我不确定你是否需要自定义验证。 很抱歉,我可能没有正确解释自己。目前不可能使用任何现有的验证规则来检查 $_POST[attribute] 是否存在,但允许空字符串作为其值。我想接受空字符串,但检查变量“address2”是否在发布请求中。我在上面创建自定义验证规则的尝试似乎不起作用。当然,我可以检查它是否在代码中设置,但在执行任何其他逻辑之前,我会尝试使用验证规则保持干净。 【参考方案1】:

您可以使用Input::has('address2') 检查地址2 输入名称是否发布了某些内容。看例子:

if(Input::has('address2')) 
    // Do something!

【讨论】:

【参考方案2】:

在 Laravel 5 中,

if($request->has('address2'))
  // do stuff

【讨论】:

【参考方案3】:

你应该像这样制作自定义验证器。

use Symfony\Component\Translation\TranslatorInterface;

class CustomValidator extends Illuminate\Validation\Validator 

    public function __construct(TranslatorInterface $translator, $data, $rules, $messages = array())
    
        parent::__construct($translator, $data, $rules, $messages);

        $this->implicitRules[] = 'AttributeExists';
    

    public function validateAttributeExists($attribute, $value, $parameters)
    
        return isset($this->data[$attribute]);
    

这将使 AttributeExists 无需使用 require 即可工作。有关此的更多说明。当您想创建新的验证器规则时。如果你没有在 $implicitRules 中设置它,那么如果你在它之前不使用 require 规则,那么该方法将无法正常工作。您可以在 laravel 源代码中找到更多信息。

【讨论】:

【参考方案4】:

当您提交表单时,每个字段都已发布,事实上,如果您将某些字段留空,则该字段值为 null 或空。只需检查一次 POST 参数,在 firefox 中打开 firebug 控制台并提交表单,然后检查 post 参数。既然要接受空字符串,那么任何规则有什么用?

否则你可以这样做

$addr2=Input::get('address2');
if(isset($addr2))
 //do here whatever you want
else
 //do something else
 $addr2='';//empty string

【讨论】:

嗨拉胡尔,这在技术上是不正确的。用户可以通过编辑 DOM 手动从 post 请求中删除字段。我对此不太担心,但希望将其用作 API 的一部分。如果未发送该字段,我希望验证失败。如果字符串已发送,但为空,则应该通过。 您必须按照我上面所说的手动执行此操作,如果 isset($addr2) 为空或未发送,则将返回 false。 太遗憾了,因为我最好使用 Laravel 验证。 Laravel 验证工作正常,但我认为没有任何此类验证可用或将确保它是必需的但为空......【参考方案5】:

实际上,Laravel 有一个方法可以验证属性是否存在,即使没有填充。

$rules = [
   'something' => 'present'
];

所有的验证规则都存储在Validator类(/vendor/laravel/framework/src/Illuminate/Validation/Validator.php)中,你可以检查每个规则的实现,即使没有记录的规则。

【讨论】:

可以添加参考吗?除了:有时验证规则。

以上是关于在使用 Laravel 进行验证期间检查输入中是不是存在字段的主要内容,如果未能解决你的问题,请参考以下文章

Laravel sanctum 检查用户是不是在没有重定向的情况下通过身份验证

Laravel - 防止对空输入进行验证检查

如何在 Laravel 和 Vue.js 中使用 jwt-auth 检查用户是不是经过身份验证

Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证

laravel 4.2 如何检查是不是有用户登录多重身份验证

想修改 laravel 默认登录来检查用户是不是被验证