laravel-commode / validation-locator
Requires
- php: >=5.5.0
- illuminate/support: 5.1.*
- illuminate/translation: 5.1.*
- illuminate/validation: 5.1.*
- laravel-commode/silent-service: dev-master
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-14 16:44:58 UTC
README
#Commode: 验证定位器
laravel-commode/validation-locator 是一个 Laravel 验证助手,可以使您的验证过程更加可靠。
####内容
##安装
您可以使用 composer 安装 laravel-commode/validation-locator。
"require": {
"laravel-commode/validation-locator": "dev-master"
}
要启用包,您需要将 LaravelCommode\ValidationLocator\ValidationLocatorServiceProvider
服务提供者注册到您的应用程序配置中。
<?php
// ./yourLaravelApplication/app/config/app.php
return [
// ... config code
'providers' => [
// ... providers
'LaravelCommode\ValidationLocator\ValidationLocatorServiceProvider'
]
];
##创建验证器这种方法允许您通过类来组织验证,使其更具上下文可靠性和可重用性。要创建验证器,您需要扩展 LaravelCommode\ValidationLocator\Validators\Validator
并实现公共方法:getRules() 和 getMessages()。getRules() 方法将接收 $isNew 布尔参数,用作标记以指示数据模型将被创建还是更新,并返回通常传递给 Validator
门面的验证规则数组。getMessages() 方法必须返回一个消息数组。例如
<?php namespace MyApp\Meta\Validations;
use LaravelCommode\ValidationLocator\Validators\Validator;
class AccountValidation extends Validator
{
/**
* Validated account model data, if it's flagged as new
* password validation and confirmation will be required.
*/
public function getRules($isNew = true)
{
$rules = [
'login' => 'required',
'email' => 'required'
];
if ($isNew)
{
$rules['password'] = 'required|confirmed';
}
return $rules;
}
public function getMessages()
{
return [];
}
}
此外,验证器还为您提供注册验证器 'sometimes' 回调的能力。您可以通过覆盖 sometimes()
方法来实现这一点
public function sometimes(\Illuminate\Validation\Validator $validator, $isNew = true)
{
//$validator->sometimes(); ...
}
##在 ValidationLocator 中注册验证器ValidationLocator 是一个容器,用于存储和解析您的验证器。它通过 ValidationLocator
门面提供,或者如果您不喜欢门面,您可以在 IoC 容器中通过别名 "commode.validation-locator" 或解析 LaravelCommode\ValidationLocator\Interfaces\IValidationLocator
(它在 IoC 中注册为单例)来找到它。
要注册您的验证器,您只需调用 ValidationLocator::addValidator($alias, $className)
。例如
<?php namespace MyApp\ServiceProviders;
use LaravelCommode\Common\GhostService;
use LaravelCommode\ValidationLocator\Interfaces\IValidationLocator;
class ValidationServiceProvider extends GhostService
{
public function uses()
{
return [
'LaravelCommode\ValidationLocator\ValidationLocatorServiceProvider'
];
}
/**
* Will be triggered when the app is booting
**/
protected function launching() { }
/**
* Triggered when service is being registered
**/
protected function registering()
{
$this->with('commode.validation-locator', function (IValidationLocator $locator)
{
$locator->addValidator('accountManagement', 'MyApp\Meta\Validations\AccountValidation');
});
// or ValidationLocator::addValidator('accountManagement', 'MyApp\Meta\Validations\AccountValidation')
}
}
##使用方法使用 ValidationLocator 的最简单示例是将它注入到控制器中
<?php namespace MyApp\Domain\Admin\Controllers;
use LaravelCommode\ValidationLocator\Interfaces\IValidationLocator;
use Illuminate\Routing\Controller;
class AccountController extends Controller
{
private $validationLocator;
public function __construct(IValidationLocator $validationLocator)
{
$this->validationLocator = $validationLocator; // not necessary if you are using a facade
}
public function postCreate()
{
$data = \Input::only(['login', 'email', 'password', 'password_confirmation']);
$validator = $this->validationLocator->getValidator('accountManagement');
// or it's available through __get()
// $this->validationLocator->getValidator->accountManagement;
if ($validator->failsModel($data, true)) // or $validator->setModel($data, true)->fails()
{
return \Redirect::to(\URL::current())->withErrors($validator->getValidator());
// return redirect with errors
}
// do stuff
}
public function postEdit()
{
$data = \Input::only(['login', 'email']);
$validator = $this->validationLocator->getValidator('accountManagement');
// or it's available through __get()
// $this->validationLocator->getValidator->accountManagement;
if ($validator->failsModel($data, true)) // or $validator->setModel($data, true)->fails()
{
return \Redirect::to(\URL::current())->withErrors($validator->getValidator());
}
// do stuff
}
}