2015-05-30 47 views
7

2 yerde 2 farklı oturum açma formundan oluşan bir web sitem var, biri navbarda ve diğeri sistem tıkanmamış bir ziyaretçi yakaladığında kullanılacak bir giriş sayfası.Laravel 5 özel doğrulama yönlendirme

LoginRequest.php sayfamda neyin yanlış yaptığımı sorabilir miyim? Giriş işleminde herhangi bir hata varsa, özel bir giriş sayfasına yönlendirmek için bir koşul belirledim? Ben aşağıdaki gibi benim kodlara sahip:

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

orada giriş sayfasına herhangi bir hata ama yönlendirmek görünmüyor eğer nav çubuğundan giriş yönlendirmek için varsayalım kodu.

Teşekkür ederiz.

cevap

6

Bir çözüm bulundu. Yapmam gereken tek şey böyle gibi

FormRequest.php

ilk yanıtın geçersiz kılmak ve bir cazibe gibi çalışır.

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

Büyük cevap. '' Array' parametresi, yapı bakımından '$ errors = $ validator-> errors()' nin çıktısını andırır, fakat (örneğin, $ errors-> all() metodları, tam olarak kullanılamaz). Yani tüm hataları bir dizi olarak almak için, yardımcı fonksiyonunu kullanın 'array_flatten ($ errors)' – gthuo

1

belirli bir url yönlendirme yapmak istiyorsanız, o zaman kullanmak protected $redirect

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

    // ... 
} 

veya adlandırılmış rota yönlendirme yapmak istiyorsanız, o zaman kullanmak $redirectRoute

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

    // ... 
} 
+0

Aslında tamamen L5.4'te geçerlidir – manix

1

Eğer Controller

yöntemini kullanıyorsunuz

daha sonra, ValidatesRequests özelliğinden, Controller tabanında mevcut olan buildFailedValidationResponse'un üzerine yazabilirsiniz. Bu hat boyunca

şey: Eğer talep üzerine doğrulama yöntemi kullanmak istemiyorsanız

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

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

, el Validator cephe kullanarak bir doğrulayıcı örneğini oluşturabilir. Cephedeki make metodu yeni bir validator örneğini oluşturur: Bakınız: 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... 
    }