从另一个控制器重用Laravel验证规则

3

问:如何在不获取整个 RegisterController 类的情况下,从另一个控制器中重用 Auth 的 RegisterController 验证规则?以下是这些规则:

...

protected function validator(array $data)
{
    return Validator::make($data, [
        'fname' => 'required|string|max:255',
        'lname' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
        'tos' => 'boolean|accepted',
    ]);
}
...

另一个控制器在:
app\Http\Controllers\UserController.php

public function update(Request $request, User $user)
{
    //I need to validate $request with the rules from
    //ControllersAuth\RegisterController.php
}

1
你可以为表单请求验证创建一个特性,并在需要时使用... - AddWeb Solution Pvt Ltd
如果你想使用trait,可以检查一下我的答案。谢谢。 - AddWeb Solution Pvt Ltd
4个回答

2

1
我建议使用trait。创建一个类似的trait:
trait ValidationTrait {
    public $errors;

    public function validate($data) {
        $Reflection = new \ReflectionClass(__CLASS__);
        $ReflectionClass = $Reflection->newInstance();
        if(empty($ReflectionClass->rules)) return TRUE;

        $v = Validator::make($data, $ReflectionClass->rules);

        if($v->fails()) {
            $this->errors = $v->failed();
            return FALSE;
        }

        return TRUE;
    }

    public function validationErrors() {
        return $this->errors;
    }
}

在模型中:
class myModel extends Eloquent {
    use ValidationTrait;

    public $rules = array(
        'fname' => 'required|string|max:255',
        'lname' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
        'tos' => 'boolean|accepted',
    );
}

Call it like:

$myModel = new myModel();

if($myModel->validate(Input::all()) {
    //validate success....
}else{
    return $Customer->validationErrors()
}

1
在 Model 中添加验证是不好的做法。最佳实践是将其保留在单独的请求文件中。 - Koushik Das

0
你应该尝试创建一个 Helper 类,这样你的代码就可以在任何类中重复使用。
如果你不知道如何创建 Helper 类,可以看一下这里的指南here

0

您可以在文件请求中添加验证规则,下次需要时,只需调用文件名即可,例如:

    public function update(UserRequest $request,User $user){
}



//1. Php artisan make:request UserRequest
//2. add rule to UserRequest file
public function rules()
        {
            return [
               'fname' => 'required|string|max:255',
            'lname' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'tos' => 'boolean|accepted',
            ];
        }

https://laravel.com/docs/5.4/validation#form-request-validation


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接