重用laravel验证规则

问题描述:

问:如何重新从另一个控制器验证的ResigsterController验证规则,而不必抓住整个RegisterController类?
下面是规则:重用laravel验证规则

... 

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', 
    ]); 
} 
... 

中的其他控制器:
应用程序\ HTTP \控制器\ UserController.php

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

你可以创建一个表单请求验证和使用时,你需要... –

+0

检查我的答案,如果你想与特质,谢谢 –

你应该尝试使用创建一个Helper类,所以你可以有一些代码可以在任何类中重用。

如果你不知道如何做一个Helper类有导游here

你可以做一个文件请求添加验证规则存在,下一次u需要它,你可以调用的文件名,前:

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

我建议使用特点。 创建一个特质,如:

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', 
    ); 
} 

这样称呼它:

$myModel = new myModel(); 

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

希望这可以帮助你顺利!