2016-01-05 14 views
9

को पुनर्निर्देशित करने के बजाय अपवाद फेंकता है, जब मैं लैरवेल 5.2 में अपग्रेड किया गया तो मुझे लार्वाले वैधकर्ता के साथ एक समस्या का सामना करना पड़ा। जब मैं नियंत्रक में डेटा को सत्यापित करना चाहता हूं उदाहरण के लिए इस कोड को ले लो।लार्वाले वैधकर्ता

<?php 

namespace App\Http\Controllers; 

use App\Http\Controllers\Controller; 

class ContactController extends Controller 
{ 
    public function storeContactRequest(Request $request) 
    { 
     $this->validate($request, [ 
      '_token' => 'required', 
      'firstname' => 'required|string' 
      'lastname' => 'required|string' 
      'age' => 'required|integer', 
      'message' => 'required|string' 
     ]); 

     // Here to store the message. 
    } 
} 

लेकिन किसी भी तरह जब मैं अमान्य डेटा दर्ज यह मेरे पिछले पृष्ठ पर रीडायरेक्ट करेगा नहीं और सत्र के लिए कुछ संदेश फ्लैश लेकिन यह एक अपवाद को गति प्रदान और मुझे एक 500 त्रुटि पृष्ठ वापस देता होगा।

यह मुझे अपवाद है। मैंने प्रलेखन में पढ़ा है कि प्रमाणीकरण अपवाद HttpResponseException के बजाय नया है लेकिन मुझे नहीं पता कि इसके साथ इसका कोई संबंध नहीं है।

[2016-01-05 11:49:49] production.ERROR: exception 'Illuminate\Foundation\Validation\ValidationException' with message 'The given data failed to pass validation.' in /home/vagrant/Code/twentyre-webshop/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php:70 

और जब मैं एक अलग अनुरोध कक्षा का उपयोग करता हूं तो यह केवल त्रुटि संदेशों के साथ पुनर्निर्देशित करेगा। ऐसा लगता है कि नियंत्रक में उपयोग की जाने वाली वैध विधि केवल इस व्यवहार से प्रभावित होती है।

+3

यह डिज़ाइन द्वारा है। अनुरोध क्लास रीडायरेक्ट करते हैं, यदि आप ValidatesRequests विशेषता का मैन्युअल रूप से सत्यापन करते हैं और अपवाद को पकड़ने और स्वयं को संभालने के लिए सत्यापित() विधि को सत्यापित करते हैं। –

+0

लेकिन जब मैं इसे नियंत्रक में उपयोग करता हूं तो अपवाद कैसे प्राप्त करूं? – DB93

+1

इसे कोशिश/पकड़ने के खंड में लपेटें –

उत्तर

4

अद्यतन अपने App\Exceptions\Handler वर्ग

use Illuminate\Auth\Access\AuthorizationException; 
use Illuminate\Database\Eloquent\ModelNotFoundException; 
use Symfony\Component\HttpKernel\Exception\HttpException; 
use Illuminate\Foundation\Validation\ValidationException; 

/** 
* A list of the exception types that should not be reported. 
* 
* @var array 
*/ 
protected $dontReport = [ 
    AuthorizationException::class, 
    HttpException::class, 
    ModelNotFoundException::class, 
    ValidationException::class, 
]; 

मैं आपको यह भी, डॉक्स कैसे 5.2 Laravel को विस्थापित करने के लिए पढ़ने के लिए सलाह देते हैं क्योंकि वहाँ कुछ टूटने परिवर्तन किया गया है। उदाहरण के लिए इस, ValidatesRequests विशेषता बजाय Illuminate\Foundation\Validation\ValidationExceptionIlluminate\Http\Exception\HttpResponseException

Documentation how to migrate from Laravel 5.1 to 5.2

+0

यह ओपी को परिणाम की आवश्यकता नहीं देगा - यह पिछले पृष्ठ और फ्लैश सत्यापन त्रुटियों पर रीडायरेक्ट नहीं होगा। –

+0

मैंने प्रमाणीकरण अपवाद को dontReport संपत्ति में जोड़ा था लेकिन यह मेरी समस्या को ठीक नहीं करता था। मैंने माइग्रेशन दस्तावेज़ पढ़ लिए हैं और मेरे प्रोजेक्ट में सभी बदलावों को लागू किया है, लेकिन यह एकमात्र चीज है जो मेरे लिए असफल रही है। – DB93

-3

जब 5.3 करने के लिए 4.2 उन्नयन मैं एक ही समस्या थी फेंकता है।

यह उत्तर मेरे लिए काम किया।

अवहेलना एप्लिकेशन/अपवाद में विधि/Handler.php

protected function convertExceptionToResponse(Exception $e) 
{ 
    if (config('app.debug')) { 
     $whoops = new \Whoops\Run; 
     $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler); 

     return response()->make(
      $whoops->handleException($e), 
      method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 500, 
      method_exists($e, 'getHeaders') ? $e->getHeaders() : [] 
     ); 
    } 

    return parent::convertExceptionToResponse($e); 
} 

जवाब मिला: https://laracasts.com/discuss/channels/laravel/whoops-20-laravel-52

+0

इस प्रश्न के साथ कुछ लेना देना नहीं है। – brad

+0

मुझे प्रश्न के समान समस्या थी। "लैरावेल वैधकर्ता वापस पुनर्निर्देशित करने के बजाय अपवाद फेंकता है"। यही समस्या है जो मैं कर रहा था। मैंने इसे उपरोक्त समाधान के साथ तय किया। इस त्रुटि के लिए एक से अधिक कारण हो सकते हैं इसलिए एक से अधिक उत्तर। मैंने किसी ऐसे व्यक्ति की मदद करने के लिए पोस्ट किया जो इस त्रुटि से जूझ रहा था जैसे मैं था। – Robbie

1

laravel दस्तावेज़ों से उदाहरण। कस्टम सत्यापन विफल होने के लिए आप वैलिडेटर मुखौटा का उपयोग कर सकते हैं

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... 
} 
संबंधित मुद्दे