我正在尝试使用验证提供的Extend函数, 这就是我所拥有的:
1)。 HomeController.php:
$rules = array(
'first_name'=>'required|regex:/^[a-z ,."-]+$/i|min:2',
'last_name'=>'required|regex:/^[a-z ,."-]+$/i|min:2',
'gender'=>'required|alpha|gendercheck',
'email'=>'required|email|unique:users,email,'.Input::get('id').',id',
'zip'=>'required|zipcheck|max:10',
);
2)。然后使用extend方法我将它添加到routes.php:
Validator::extend('zipcheck', function($field,$value,$parameters){
// List of regular expressions to use, if a custom one isn't specified.
$countryRegs = array(
"US"=>"/^[\d]{5}(-[\d]{4})?$/",
"GB"=>"/^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/",
"DE"=>"/\b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b/",
"CA"=>"/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/",
"FR"=>"/^(F-)?((2[A|B])|[0-9]{2})[0-9]{3}$/",
"IT"=>"/^(V-|I-)?[0-9]{5}$/",
"AU"=>"/^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$/",
"NL"=>"/^[1-9][0-9]{3}\s?([a-zA-Z]{2})?$/",
"ES"=>"/^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$/",
"DK"=>"/^([D-d][K-k])?( |-)?[1-9]{1}[0-9]{3}$/",
"SE"=>"/^(s-|S-){0,1}[0-9]{3}\s?[0-9]{2}$/",
"BE"=>"/^[1-9]{1}[0-9]{3}$/"
);
// get country submitted..
$country = Input::get('country');
// check country if in the array..
if (key_exists($country , $countryRegs))
return preg_match($countryRegs[$country], $value);
else // other countries make sure no special characters in there
return preg_match('/^[a-z0-9- ]+$/i' , $value);
});
问题是我想保持我的代码有条理,我不想将验证扩展添加到我的routes.php
最好的方法是让我可以在自己的类中拥有这些并从我的HomeController调用它们仍然可以工作?
由于
答案 0 :(得分:2)
有很多方法可以做到这一点。我喜欢的方式是创建一个文件/app/validators.php
(因此它与routes.php和filters.php
位于同一位置)
然后转到app / start / global.php并在过滤器需要后在底部添加:
require app_path().'/validators.php';
您现在可以在validators.php
文件中声明所有扩展验证器 - 并且Laravel将使用它们。
答案 1 :(得分:1)
有几种方法可以做。我个人喜欢通过ValidationService
扩展验证(我认为它更清洁)。
1)我们假设您使用PSR-4在composer.json
中加载您自己的公司目录:
{
"autoload": {
"psr-4": {
"Acme\\": "app/Acme"
}
...
},
}
您必须运行composer dumpautoload
。
2)创建验证服务提供商:
应用程序/ Acme的/扩展/验证/ ValidationServiceProvider.php
<?php
namespace Acme\Extension\Validation;
use Illuminate\Support\ServiceProvider;
class ValidationServiceProvider extends ServiceProvider {
public function register() {
}
public function boot() {
$this->app->validator->resolver(function($translator, $data, $rules, $messages) {
return new CustomValidator($translator, $data, $rules, $messages);
});
}
}
3)在app/config/app.php
注册您的服务提供商以进行自动加载:
<?php
return array(
'providers' => array(
...
'Acme\Extension\Validation\ValidationServiceProvider',
),
);
4)创建自定义验证规则:
应用程序/ Acme的/扩展/验证/ CustomValidator.php
<?php
namespace Acme\Extension\Validation;
use Illuminate\Validation\Validator as IlluminateValidator;
class CustomValidator extends IlluminateValidator {
public function validateAlphaNumSpace($attribute, $value) {
return preg_match('/^([a-z\x20])+$/i', $value);
}
public function validateZip($attribute, $value, $parameters) {
...
}
}
5)您已准备好使用自定义规则。例如,如果我想使用我的AlphaNumSpace
规则(在许多情况下很有用,因为原始的AlphaNum规则不允许空格!):
$rules = [
'name' => 'required|alpha_num_space',
'zipcode' => 'required|zip',
];