yangmls/laravel-validation-trait

提供一种强大的特性,方便保存模型

dev-master 2015-06-15 13:33 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:51:49 UTC


README

为laravel 4模型提供强大的特性

在Eloquent中使用它

创建一个模型并使用它

use Yangmls\ValidationTrait;

class User extends Eloquent
{
    use ValidationTrait;

    public function rules()
    {
        return [
            'email' => ['required', 'email'],
        ];
    }

    public function ruleMessages()
    {
        return [
            'email.required' => ':attribute is required',
        ];
    }

    public function customAttributes()
    {
        return [
            'email' => 'E-Mail',
        ];
    }
}

创建一个新的模型并保存

$model = new User();
$result = $model->saveFromRequest(Input::all()); // true or false
return Response::json($model->getErrors());

创建一个新的模型且无错误

$model = User::createFromRequest(Input::all()); // User instance or null

保存现有的模型

$model = User::find(1);
$result = $model->saveFromRequest(Input::all()); // true or false
return Response::json($model->getErrors());

在其他模型中使用它

有时你可能需要在没有Eloquent的情况下处理表单,你可以这样做

use Yangmls\ValidationTrait;

class Login
{
    use ValidationTrait;

    public $attributes;

    public function __construct($input = [])
    {
        $this->attributes = $input;
    }
    
    public function validate($options = [])
    {
        return $this->validateRequest($this->attributes, $options);
    }

    public function rules()
    {
        return [
            'email' => ['required', 'email'],
        ];
    }

    public function ruleMessages()
    {
        return [
            'email.required' => ':attribute is required',
        ];
    }

    public function customAttributes()
    {
        return [
            'email' => 'E-Mail',
        ];
    }
}

然后在控制器中调用它

$model = new Login(Input::all());
$result = $model->validate(); // true or false
return Response::json($model->getErrors());

内联验证器

验证器可以定义在类中,并且会自动调用

use Yangmls\ValidationTrait;

class User extends Eloquent
{
    use ValidationTrait;

    protected function validatorEmail($value, $input, $options)
    {
        // $value is attribute value
        // $input is whole input
        // $options is the config you pass to saveFromRequest
        
        // Note: 
        // 1. you must use addError to stop saving
        // 2. you must return true if you think the validator is passed
    }
}

内置钩子

以下方法在验证或保存时会被自动调用

beforeSaveafterSavebeforeValidateafterValidate

然而,你也可以使用laravel内置的事件进行保存/创建/更新

许可

MIT许可