PHPackages                             five-say/laravel-validation - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. five-say/laravel-validation

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

five-say/laravel-validation
===========================

validation support exception

v2.0.0(11y ago)4252PHP

Since Aug 30Pushed 11y ago2 watchersCompare

[ Source](https://github.com/5-say/laravel-validation)[ Packagist](https://packagist.org/packages/five-say/laravel-validation)[ RSS](/packages/five-say-laravel-validation/feed)WikiDiscussions master Synced today

READMEChangelog (4)Dependencies (1)Versions (5)Used By (0)

laravel-validation
==================

[](#laravel-validation)

- 异常化表单验证

---

- [使用前的准备](#1)
- [使用方法](#2)
- [自定义验证消息](#3)
- [特殊用法（直接抛出异常）](#4)
- [实际项目中的应用节选，是时候开始引入异常化编程了！](#5)
- [模型的异常化](#6)
- [额外的支持 - 模型观察者（模型事件监听）](#7)
- [模型事件的触发顺序](#8)

> 合理的利用异常化编程方法，可以使代码可维护性大幅提高。

使用前的准备
------

[](#使用前的准备)

在 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)
    {
        //
    }

}
```

模型事件的触发顺序
---------

[](#模型事件的触发顺序)

```
