2015-05-30 44 views
7

Tôi có một trang web bao gồm 2 hình thức đăng nhập khác nhau tại 2 địa điểm, một trên thanh điều hướng và một trang khác là trang đăng nhập sẽ được sử dụng khi hệ thống bắt khách truy cập chưa được yêu cầu.Laravel 5 chuyển hướng xác nhận tùy chỉnh

Tôi có thể hỏi những gì đã làm gì sai trong LoginRequest.php tôi, nơi tôi đã thiết lập một điều kiện để chuyển hướng đến một trang đăng nhập tùy chỉnh nếu có bất kỳ loại lỗi trong quá trình đăng nhập? Tôi có mã của tôi như sau:

<?php namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class LoginRequest extends Request { 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
     'login_email'    => 'required', 
     'login_password'   => 'required' 
     ]; 
    } 


    public function messages() 
    { 
     return [ 
      'login_email.required'   => 'Email cannot be blank', 
      'login_password.required'  => 'Password cannot be blank' 
     ]; 
    } 

    public function redirect() 
    { 
     return redirect()->route('login'); 
    } 
} 

Mã giả sử chuyển hướng người dùng đăng nhập từ thanh điều hướng nếu có bất kỳ lỗi nào trên trang đăng nhập nhưng dường như không chuyển hướng.

Cảm ơn bạn.

Trả lời

6

Tìm thấy giải pháp. Tất cả tôi cần làm là để ghi đè các phản ứng ban đầu từ

FormRequest.php

như vậy và nó hoạt động như một nét duyên dáng.

public function response(array $errors) 
{ 
    // Optionally, send a custom response on authorize failure 
    // (default is to just redirect to initial page with errors) 
    // 
    // Can return a response, a view, a redirect, or whatever else 

    if ($this->ajax() || $this->wantsJson()) 
    { 
     return new JsonResponse($errors, 422); 
    } 
    return $this->redirector->to('login') 
     ->withInput($this->except($this->dontFlash)) 
     ->withErrors($errors, $this->errorBag); 
} 
+0

Great câu trả lời. Tham số 'mảng' tương tự như đầu ra của' $ errors = $ validator-> errors() 'về cấu trúc (nhưng các phương thức, ví dụ: $ errors-> all() có thể không hoàn toàn được sử dụng trên nó). Vì vậy, để có được tất cả các lỗi dưới dạng một mảng, hãy sử dụng hàm trợ giúp 'array_flatten ($ errors)' – gthuo

1

nếu bạn muốn chuyển hướng đến một url cụ thể, sau đó sử dụng protected $redirect

class LoginRequest extends Request 
{ 
    protected $redirect = "/login#form1"; 

    // ... 
} 

hoặc nếu bạn muốn chuyển hướng đến một con đường được đặt tên, sau đó sử dụng $redirectRoute

class LoginRequest extends Request 
{ 
    protected $redirectRoute = "session.login"; 

    // ... 
} 
+0

Thực ra là hoàn toàn hợp lệ trong L5.4 – manix

1

Nếu bạn đang sử dụng phương pháp validate() trên Controller

$this->validate($request, $rules); 

thì bạn có thể ghi đè lên buildFailedValidationResponse từ đặc điểm ValidatesRequests có trên cơ sở Controller bạn mở rộng.

cái gì đó dọc dòng này:

protected function buildFailedValidationResponse(Request $request, array $errors) 
{ 
    if ($request->expectsJson()) { 
     return new JsonResponse($errors, 422); 
    } 

    return redirect()->route('login'); 
} 
0

Nếu bạn không muốn sử dụng phương thức validate trên yêu cầu, bạn có thể tạo ra một trường hợp xác nhận bằng tay bằng cách sử dụng Validator mặt tiền. Các phương pháp làm cho trên mặt tiền tạo ra một trường hợp validator mới: Tham khảo Laravel Validation

public function store(Request $request) 
    { 
    $validator = Validator::make($request->all(), [ 
     'title' => 'required|unique:posts|max:255', 
     'body' => 'required', 
    ]); 

    if ($validator->fails()) { 
     return redirect('post/create') 
        ->withErrors($validator) 
        ->withInput(); 
    } 

    // Store the blog post... 
    } 
Các vấn đề liên quan