Laravel 自定义验证消息
Posted
技术标签:
【中文标题】Laravel 自定义验证消息【英文标题】:Laravel custom validation messages 【发布时间】:2014-07-22 16:11:22 【问题描述】:我正在尝试使用 Laravel
验证英国邮政编码。这是我得到的:
//routes.php
$rules = array(
'pcode' => array('required:|Regex:/^([Gg][Ii][Rr] 0[Aa]2)|((([A-Za-z][0-9]1,2)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]1,2)|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]2)$/')
);
$messages = array(
'required' => 'The :attribute field is required.',
'pcode' => array('regex', 'Poscode should be a valid UK based entry'),
);
$validator = Validator::make(Input::all(), $rules, $messages);
在我的blade
:
<input id="postcode" name="pcode" value="Input::old('pcode')" type="text" placeholder="Postcode" class="form-control" xequired="" />
@if( $errors->has('pcode') ) <span class="error" style='background-color: pink;'> $errors->first('pcode') </span> @endif
如果我提交带有空 pcode
字段的表单,它会警告我输入必填字段。如果我输入了一个无效的邮政编码,比如“74rht”,我的验证器将什么都不做或无法显示我上面定义的自定义消息?
【问题讨论】:
【参考方案1】:Laravel manual 声明:
Note: When using the regex pattern, it may be necessary to specify rules in an array instead of using pipe delimiters, especially if the regular expression contains a pipe character.
把$rules
改成这个结构:
$rules = array(
'pcode' => array(
'required',
'Regex:/^([Gg][Ii][Rr] 0[Aa]2)|((([A-Za-z][0-9]1,2)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]1,2)|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]2)$/'
)
);
如果这不起作用,那么您的正则表达式可能无效,请尝试使用更简单的正则表达式来检查验证器是否有效。
【讨论】:
【参考方案2】:首先,您需要向验证器注册自定义验证规则。
Validator::extend('pcode_rule_name', function($attribute, $value)
return preg_match('/^([Gg][Ii][Rr] 0[Aa]2)|((([A-Za-z][0-9]1,2)|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]1,2)|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]2)$/', $value);
);
源代码:http://laravel.com/docs/validation#custom-validation-rules
然后你需要在 app/lang/en/validation.php 中指定自定义消息
您会找到为您的规则添加自定义消息的地方
'custom' => array(
'attribute-name' => array(
'rule-name' => 'custom-message',
),
),
您可以像这样添加规则:
'custom' => array(
'pcode' => array(
'pcode_rule_name' => 'Post Code should be a valid UK based entry',
),
),
还将有一个数组来命名您的“pcode”字段,因此它将更雄辩地命名为“必需”等规则。
'attributes' => array(),
只需像这样添加名称
'attributes' => array(
'pcode' => 'Postal Code",
),
【讨论】:
以上是关于Laravel 自定义验证消息的主要内容,如果未能解决你的问题,请参考以下文章