Php Laravel 5中的自定义验证器
我正在将我的Laravel应用程序从4升级到5。但是,我有一个自定义验证器,我无法使用它 在L4中,我创建了一个validators.php文件,并使用Php Laravel 5中的自定义验证器,php,validation,laravel,laravel-5,Php,Validation,Laravel,Laravel 5,我正在将我的Laravel应用程序从4升级到5。但是,我有一个自定义验证器,我无法使用它 在L4中,我创建了一个validators.php文件,并使用require app_path()。/validators.php'将其包含在global.php中 我试着在L5中做一些相同的事情。我在app/Validators/Validators.php中删除了一个验证器,并更新了composer.json 但是,现在任何页面上都不会呈现任何内容。我做错了什么?尝试以下方法: 创建一个绑定类,在其中可
require app_path()。/validators.php'将其包含在global.php中代码>
我试着在L5中做一些相同的事情。我在app/Validators/Validators.php中删除了一个验证器,并更新了composer.json
但是,现在任何页面上都不会呈现任何内容。我做错了什么?尝试以下方法:
创建一个绑定类,在其中可以实现要扩展的每个规则Validator
类
创建扩展服务提供商的服务提供商
在config/app.php
文件中添加自定义验证程序提供程序
您可以在Services
文件夹中创建绑定,如下所示:
namespace MyApp\Services;
class Validator extends \Illuminate\Validation\Validator{
public function validateFoo($attribute, $value, $parameters){
return $value == "foo"
}
}
然后,使用服务提供商扩展核心:
namespace MyApp\Providers;
use MyApp\Services\Validator;
use Illuminate\Support\ServiceProvider;
class ValidatorServiceProvider extends ServiceProvider{
public function boot()
{
\Validator::resolver(function($translator, $data, $rules, $messages)
{
return new Validator($translator, $data, $rules, $messages);
});
}
public function register()
{
}
}
最后,在config/app.php
导入您的服务提供商,如下所示:
'providers' => [
...
...
'MyApp\Providers\ValidatorServiceProvider';
]
下面是我在添加自定义验证时所做的。这是给拉威尔5.1的
运行PHP Artisan make:request MyFormValidationRequest
文件是在app\Requests\MyFormValidationRequest.PHP
以下是初始代码:
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class MyFormValidationRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
从今天开始
是我的新验证
我在应用文件夹下创建了一个名为“服务”的文件夹
我在App\Services文件夹下创建了一个名为“ValidatorExtended.php”的文件,下面是代码:
<?php
namespace App\Services;
use Illuminate\Validation\Validator;
use Carbon\Carbon;
class ValidatorExtended extends Validator {
private $_custom_messages = array(
"today_onwards" => "The :attribute must be today onwards",
);
public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
parent::__construct( $translator, $data, $rules, $messages, $customAttributes );
$this->_set_custom_stuff();
}
protected function _set_custom_stuff() {
//setup our custom error messages
$this->setCustomMessages( $this->_custom_messages );
}
protected function validateTodayOnwards( $attribute, $value ) {
$now = strtotime('-1 day');
$valueDateFormat = strtotime($value);
if($valueDateFormat > $now){
return true;
}
else {
return false;
}
}
}
不要忘记在下面添加库,一个是Validator类,另一个是您自己的类,即“ValidatorExtended
”
下面是整个文件的样子,[app\Providers\AppServiceProvider.php
]
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\ValidatorExtended;
use Illuminate\Support\Facades\Validator;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array())
{
return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes);
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
您没有使用请求类,而是使用您自己的类,它是请求类的扩展。检查您的日志-app/storage/logs/laravel.log
和/或您的Web服务器的日志文件。您是否运行了composer dump autoload
?@ceejayoz失败时不会记录任何内容。卢卡斯盖特:是的,我工作得很有魅力。谢谢你,很好!很高兴能帮助您为什么文档中没有涵盖这一点?!!关于整个主题,它有三段文字。@manix我希望我早一点看到这个。我刚刚在这里发布了一个类似(但不同)的答案:我必须展示如何使用其他输入,所以我想这是值得的。只需花2天时间处理这个****,而用本机PHP编写它需要几秒钟。。。该死,拉威尔!很抱歉,步骤9无法使代码格式化工作,请提供任何帮助。附加说明:如果您尝试验证的字段为空,则自定义验证将不起作用。
<?php
namespace App\Services;
use Illuminate\Validation\Validator;
use Carbon\Carbon;
class ValidatorExtended extends Validator {
private $_custom_messages = array(
"today_onwards" => "The :attribute must be today onwards",
);
public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
parent::__construct( $translator, $data, $rules, $messages, $customAttributes );
$this->_set_custom_stuff();
}
protected function _set_custom_stuff() {
//setup our custom error messages
$this->setCustomMessages( $this->_custom_messages );
}
protected function validateTodayOnwards( $attribute, $value ) {
$now = strtotime('-1 day');
$valueDateFormat = strtotime($value);
if($valueDateFormat > $now){
return true;
}
else {
return false;
}
}
}
Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array())
{
return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes);
});
use App\Services\ValidatorExtended;
use Illuminate\Support\Facades\Validator;
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\ValidatorExtended;
use Illuminate\Support\Facades\Validator;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array())
{
return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes);
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
class testController extends Controller
{
public function updatePass(MiscValidation $request){
//code here
}
}