2016-09-29 10 views
1

私はこのコードをリファクタリングする必要があります。新しい関数のコードのリファクタリング、LARAVEL

新しい機能に検証コードを入れ、その機能を別の機能で使用する必要があります。 このコード

public function comprobarValidacion(\Request $request) 
     { 
      $validador = $this->validator($request::all()); 
       $errors = $validador->errors()->all(); 

      if(count($errors)): 

      return Redirect()->back()->withErrors($validador); 

      endif; 
     } 

私はこの

public function postLogin(\Request $request) 
{ 

    $this->comprobarValidacion($request::all()); 
    return Redirect()->back(); 
} 

のように、各機能でそれを呼んでみてください、それは作品をdoesn't。しかし、私がcomprobarValidacionのコンテンツを任意の関数の中に置くと、コードは役に立ちます。

これは完全なコードです。

class AuthController extends Controller { 


      use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

      protected $auth; 

      protected $redirectTo = '/dashboard'; 

      //despues de loguear 

      protected $redirectAfterLogout = '/paginaporcrear'; 


      public function __construct(Guard $auth) 
      { 
       // $this->middleware($this->guestMiddleware(), ['except' => 'logout']); 
       // $this->middleware($auth); 

       $this->auth = $auth; 


      } 


      protected function validator(array $data) 
      { 

       $reglas = [ 
        'name' => 'required|max:255', 
        'email' => 'required|email|max:255|unique:users', 
        'password' => 'required|min:1|confirmed', 
          ]; 
       $mensajes = [ 
        'required' => 'El campo :attribute es requerido', 
        'email' => 'El campo :atribute tiene que tener formato de email', 
          ]; 

       return Validator::make($data, $reglas, $mensajes); 
      } 


      public function comprobarValidacion(\Request $request) 
      { 
       $validador = $this->validator($request::all()); 
        $errors = $validador->errors()->all(); 

       if(count($errors)): 

       return Redirect()->back()->withErrors($validador); 

       endif; 
      } 


      public function getRegistro() 
      { 
       return view('auth.register'); 
      } 


      public function postRegistro(\Request $request) 
      { 
        $validador = $this->validator($request::all()); 

        $errors = $validador->errors()->all(); 

        if(count($errors)>0): 

        return Redirect()->back()->withErrors($validador); 

        endif; 


       $this->create($request::all()); 



       \Session::flash('creado','El usuario '.$request::get('name').' ha sido creado exitosamente'); 
       return Redirect()->back(); 

      } 

      public function getLogin() 
      { 

       return view('auth.login'); 
      } 

      public function postLogin(\Request $request) 
      { 
        // $validador = $this->validator($request::all()); 
        // $errors = $validador->errors()->all(); 

        // if(count($errors)): 

        //  return Redirect()->back()->withErrors($validador); 

        // endif; 


       $this->comprobarValidacion($request::all()); 
       return Redirect()->back(); 
      } } 

¿どうすればいいですか?

答えて

0

comprobarValidacion関数でリターンを実行すると、その結果がアクションに返されます。登録エリアがどのようにlaravel(Auth/RegisterController)でそれを行うのかを見ていきます。

これはバリデータを返し、コントローラアクションで - > validateメソッドを実行します。 Laravelは自動的にアクションで()の検証に失敗したコールを処理し、例外でconvertValidationExceptionToResponseを呼び出しハンドラは

protected function validator(array $data) 
{ 
    // Notice how it doesn't call ->validate() 
    return Validator::make($data, [ 
     'name'  => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|min:6|confirmed', 
    ]); 
} 

次にレジスタアクションで

public function register(Request $request) 
{ 
    // This runs the validate method in the action. 
    $this->validator($request->all())->validate(); 

    event(new Registered($user = $this->create($request->all()))); 

    $this->guard()->login($user); 

    return redirect($this->redirectPath()); 
} 
0

ルール

public function add_user_rules(array $data) 
{ 
    $messages = [ 
    'email.required' => 'Please enter email.' 
    ]; 

    $validator = Validator::make($data, [ 
    'email' => 'required|max:30|unique:email', 
    'name' => 'required' 
    ], $messages); 

    return $validator; 
} 


public function postAdd(Request $request) 
{ 
    $request_data = $request->all(); 
    $validator = $this->add_user_rules($request_data); 
    if($validator->fails()) 
    { 
    return redirect()->back()->withErrors($validator)->withInput(); 
    } 
    else 
    { 
    //add 
    }  
} 
を作成します。
関連する問題