laravel-commode/validation-locator

dev-master 2015-06-15 23:54 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:44:58 UTC


README

#Commode: 验证定位器

Build Status Code Climate Coverage Status

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
        }
    }