jespejoh / laravalidator
Laravel的验证服务
Requires
- php: >=5.5.9
- laravel/framework: 5.*
This package is not auto-updated.
Last update: 2016-12-06 09:39:51 UTC
README
为Laravel 5提供验证服务的包。
目标
关于数据验证的位置有很多讨论:仓库?控制器?网关?服务?模型?每个都有其优点和缺点...我个人发现将此逻辑提取到可以注入到同一层或更高层其他服务中的服务很有用。
因此,本包的目标是提供一个简单的验证服务,可以注入到其他服务中,尽管它默认使用Laravel Validation类,但它可以扩展以使用其他验证库。
安装
- 通过将其添加到您的
composer.json
或通过在项目的文件夹中运行composer require jespejoh/laravalidator
来安装此包。 - 准备好了!不需要服务提供者或其他任何东西 :)
用法
您只需要创建一个继承主验证类(LaravelValidator
)并实现自己的验证数据方法的验证类。听起来很奇怪,对吧?让我们看一个例子...
示例
我个人喜欢将Laravel代码与应用代码分开,所以通常在app文件夹中创建一个包含所有业务逻辑(与框架松耦合)的文件夹:app/MyWebApp。在那个文件夹中,我喜欢根据这些文件的职责将文件拆分成不同的文件夹:模型?仓库?助手?服务?等等...
再次强调——这只是个人喜好——我喜欢将服务拆分成职责区域:用户、认证、邮件等。然后,在那些服务文件夹中,我喜欢包含验证器。所以我的项目中的文件夹结构大部分时间看起来是这样的
+-- app
| +-- MyApp
| +-- Models
| +-- Helpers
| +-- Repositories
| .
| .
| +-- Services
| +-- Auth
| +-- Mailing
| +-- Users
| +-- UsersServicesInterface.php
| +-- UsersServiceProvider.php
| .
| .
| +-- src
| +-- Validation
| +-- UserValidatorInterface.php
| +-- src
| +-- LaravelUserValidator.php
让我们看看我是如何实现UserValidatorInterface和LaravelUserValidator类的
<?php namespace MyApp\Services\Users\Validation; interface UserValidatorInterface { const EXISTS_BY_ID = 'existsById'; const EXISTS_BY_EMAIL = 'existsByEmail'; public function existsById(); public function existsByEmail(); }
<?php namespace MyApp\Services\Users\Validation\src; use Jespejoh\LaraValidator\src\LaravelValidator; class LaravelUserValidator extends LaravelValidator implements UserValidatorInterface { public function existsById() { return [ 'id' => 'required|exists:users,id' ] } public function existsByEmail() { return [ 'email' => 'required|exists:users,email' ] } }
此组服务的服务提供者(UsersServiceProvider
)应负责为我提供用户验证器,绑定到LaravelUserValidator,如下所示
public function register() { // Register other services here... // Clients validation services $this->app->bind( 'MyApp\Services\Users\Validation\UserValidatorInterface', function ( $app ) { return $app->make( 'MyApp\Services\Users\Validation\src\LaravelUserValidator' ); }); }
完成此操作后,将我们的服务提供者添加到config/app.php
文件中,我们就可以在任何地方注入验证服务。我喜欢只在其他服务中使用它。如下所示...
<?php namespace MyApp\Services\Users\src; use MyApp\Services\Users\Validation\UserValidator; class UsersService implements UsersServicesInterface { protected $usersValidator; public function __construct( UsersValidator $usersValidatorInterface ) { $this->usersValidator = $usersValidatorInterface; } public function getUserById( $userId ) { $data = [ 'id' => $userId ] if ( $this->usersValidator->with( $data )->passes( UserValidatorInterface::EXISTS_BY_ID ) ) { // It passes the validation, so do whatever.. fetch user in $user and return it (for example). . . return $user; } // if we are at this point then the validation failed and this will return an array with the errors. return $this->usersValidator->errors(); } }
变更日志
v0.1.0
- 使用Laravel Validation类的基本Laravel验证服务。
鸣谢
错误 & 贡献
- 发现错误?这既是好事也是坏事。请通过GitHub上的问题告诉我。
- 需要功能或有有趣的内容要贡献?太好了!请发起一个pull request。
许可证
MIT许可证(MIT)。更多信息请参阅许可证文件。