five-say / laravel-validation
There is no license information available for the latest version (v2.0.0) of this package.
validation support exception
v2.0.0
2015-04-18 09:40 UTC
Requires
- illuminate/support: 4.1.*
This package is not auto-updated.
Last update: 2024-12-17 04:34:38 UTC
README
- 异常化表单验证
合理的利用异常化编程方法,可以使代码可维护性大幅提高。
使用前的准备
在 composer.json 文件中申明依赖:
"five-say/laravel-validation": "1.*"
在 /app/config/app.php
中设置“别名”
'aliases' => array( ... 'Validation' => 'FiveSay\LaravelValidation\Facade', // 异常化表单验证 ),
使用方法
try { Validation::make(array( 'name' => 'required', )); // 验证通过后的其它操作 ... } catch (FiveSay\ValidationException $e) { return Redirect::back()->withErrors($e->errors); }
自定义验证消息
Validation::make( array( 'name' => 'required', ), array( 'name.required' => '自定义验证消息', ) );
特殊用法(直接抛出异常)
Validation::throwIt('name', 'test error message.');
Validation::throwIt(array( 'name' => 'test error message.', 'email' => 'test error message.', ));
实际项目中的应用节选,是时候开始引入异常化编程了!
我们可以不受干扰的写完一整个业务逻辑,然后再针对捕获的异常做细化的错误处理,你会感觉到写代码从未有过的顺畅,整个代码的可读性也大幅度的提高。
/** * 创建 * @return Response */ public function store() { try { # 表单验证 Validation::make(array( 'account' => 'required|between:3,50|unique:users', 'password' => 'required|between:5,32', 'password_confirm' => 'required|same:password', 'name' => 'required|min:2', 'mobiles' => 'multi_mobile', )); # 创建使用者账号 $user = User::create( array('activated' => true) // 强制激活 + Input::only('account', 'password', 'name') )->setGroupTo('Reception'); # 创建员工信息 $staff = Staff::create( array( 'user_id' => $user->id, 'model' => 'Reception', ) + Input::only('name', 'mobiles') ); # 创建前台 $reception = Reception::create( array( 'user_id' => $user->id, 'staff_id' => $staff->id, ) + Input::only('name') ); # 操作成功 return Redirect::route('home')->withSuccess('操作成功'); } catch (FiveSay\ValidationException $e) { return Redirect::back()->withErrors($e->errors); } catch (UserSaveFailException $e) { return Redirect::back()->withError('账号信息写入失败'); } catch (StaffSaveFailException $e) { return Redirect::back()->withError('员工信息写入失败'); } catch (ReceptionSaveFailException $e) { return Redirect::back()->withError('前台信息写入失败'); } }
模型的异常化
上例中的
UserSaveFailException
即是模型异常化的结果。要达到这种效果仅仅需要两个步骤。让我们以User
模型为例:
1、继承 FiveSay\Model
(不必担心,我们的 FiveSay\Model
已经继承了 Eloquent
):
class User extends FiveSay\Model { ...
2、在 User.php
文件的底部定义3个异常类:
class User extends FiveSay\Model { ... } class UserNotFindException extends Exception {} class UserSaveFailException extends Exception {} class UserDeleteFailException extends Exception {}
额外的支持 - 模型观察者(模型事件监听)
继承了
FiveSay\Model
的模型将额外获得一个特性:当对应的“模型观察者类”(XxxxObserver
)存在时,将自动载入。
同样以User
模型为例:当你在系统任何地方定义了UserObserver
后,这个类就会被自动注册为“模型观察者”。
class UserObserver { public function saving($model) { // } public function saved($model) { // } }
模型事件的触发顺序
<?php /* |-------------------------------------------------------------------------- | 模型观察者 |-------------------------------------------------------------------------- | 模型事件触发顺序 |-------------------------------------------------------------------------- | | 创建 & 更新 | |-- creating -- created --| | saving --| |-- saved | |-- updating -- updated --| | | 软删除 & 强制删除 | |-- softing -- softed --| | deleting --| |-- deleted | |-- forcing -- forced --| | | 恢复 | restoring -- saving -- updating -- updated -- saved -- restored | */ class DemoObserver { // ... }
注意:
softing
softed
forcing
forced
并非原生事件,是由FiveSay\Model
拓展得到的。