grandadevans / laravel-form-validator
为Laravel 4生成验证表单的包。
Requires
- php: >=5.4.0
- illuminate/config: 4.2.*
- illuminate/console: 4.2.*
- illuminate/filesystem: 4.2.*
- illuminate/support: 4.2.*
- laracasts/validation: ~1.2.0
- mustache/mustache: v2.7.0
Requires (Dev)
- codeception/codeception: ~2.0.0
- mockery/mockery: ~0.9.0
- phpspec/phpspec: ~2.0.0
- phpunit/phpunit: 4.2.6
README
内容
简介
在使用了Jeffrey Way的生成器和验证器包一段时间后,我厌倦了复制粘贴表单验证文件的代码,所以我想创建自己的版本。
这个包会做什么?
此包将创建一个包含要验证的验证规则的表单验证文件。
为什么不直接使用生成器包?
因为我作为一个自由职业的网页开发者,客户只有3个或4个,这给我提供了展示我的编程技能的完美机会。这样,当人们问我是否有什么工作时,我提到“白标”和“保密协议”时,就不会显得像是在找借口。
安装
通过Composer安装此包。
"require-dev": { "grandadevans:laravel-form-validator": "~0.1.0" }
然后在你的app/config/app.php中包含服务提供者,将其添加到“providers”数组中
/* * app/config/app.php */ 'providers' => array( ######### 'Grandadevans\GenerateForm\ServiceProvider\GenerateFormServiceProvider' );
别忘了composer.json需要知道从哪里自动加载表单。所以如果表单保存在默认的app/Forms
目录中,你只需将其添加到classMap
/* * composer.json */ "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/Forms" ] }
另外:因为你已经更改了classMap,所以你需要运行
composer dump-autoload
用法
从命令行,你可以使用以下命令调用包
php artisan generate:form
从你的Laravel安装根目录。
必需参数
只有一个必需参数,那就是表单的名称。
选项
- --dir 这是保存表单的目录 (默认为app/Forms)。请在执行命令之前确保目录存在。
- --rules 这是一个表示要使用的规则的字符串 (见下文)。
- --namespace 这是分配给表单的命名空间。
规则选项
这是命令真正发挥作用的地方。规则字符串应由以下内容组成
- 要验证的输入字段名称,后面跟着一个竖线(|)
- 输入需要验证的条件的列表。每个条件由另一个冒号(竖线)分隔
- 如果您想验证另一个字段,则用连字符(&)分隔它们,并继续。
示例:如果我想验证一个包含用户名和密码字段的典型登录表单,我会将规则选项设置为以下内容
php artisan generate:form Login --rules="username|required|between:6,50|alpha & password|required|min:8"
输入的每个条件(必填、确认等)都将与Laravel文档中提供的条件进行验证。
一旦执行命令,就会生成一个表单并将其放置在指定的目录中(或默认的app/Forms)。
将生成的表单注入到您的控制器(或您想要进行验证的地方)
protected $loginForm; public function __construct(LoginForm $loginForm) { $this->loginForm = $loginForm; }
尝试使用以下内容验证输入
$this->loginForm->validate(Input::only(['username','password']));
示例
假设我想创建上述提到的登录表单
步骤1:创建表单
php artisan generate|form Login --rules="username|required|between:6,50|alpha & password|required|min:8"
我可以在app/Forms/FooForm.php
中查看该表单。
<?php use Laracasts\Validation; /** * * Class LoginForm * */ class LoginForm extends FormValidator { /** * The array of rules to be processed * * @var array */ protected $rules=[ 'username' => 'required|between:6,50|alpha', 'password' => 'required|min:8', ]; }
步骤2:将表单注入到控制器/模型
/* * app/controllers/LoginController.php */ public function LoginController extends BaseController { /** * @var LoginForm */ protected $loginForm; /** * @param LoginForm $loginForm */ public function __construct(LoginForm $loginForm) { $this->loginForm = $loginForm; }
步骤3:验证输入
/** * Validate the login details */ public function validateForm() { $input = Input::only([ 'username', 'password' ]); try { $this->loginForm->validate($input); } catch(\Laracasts\Validation\FormValidationException $e) { return Redirect::back()->withInput()->withErrors($e->getErrors()); } // Do something with the data }
测试
在构建此包的过程中,我已经使用以下内容进行了测试
- PHPSpec - 通用低级测试
- Codeception - 从命令行进行端到端测试
- PHPUnit - 单元测试,用于使用Symfony的CommandTester测试命令本身
我还使用了Travis监视构建失败的情况,您可以访问它的Travis CI页面来检查其进度
如果您想查看测试结果,请导航到vendor/grandadevans/laravel-form-validator
并运行
composer install --dev
您然后可以单独运行测试
./vendor/bin/codecept run acceptance ./vendor/bin phpspec run ./vendor/bin phpunit
或者您可以运行测试脚本以显示所有结果
./runTests.sh