在使用 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 和 Vue.js 中使用 jwt-auth 检查用户是不是经过身份验证
Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证