मैं लार्वेल के लिए शुरुआत कर रहा हूँ। मैं एक लार्वा आवेदन भर में आया था। उसमें मुझे सभी प्रकार के अपवाद/त्रुटियों को संभालने की आवश्यकता है। अपवाद जैसे ViewException, ErrorException आदि। मुझे उन सभी सिस्टम अपवादों, त्रुटियों और सभी डेटाबेस या कोडिंग अपवादों और त्रुटियों के लिए एक दृश्य पृष्ठ (रखरखाव के तहत साइट) दिखाने की आवश्यकता है।

मैंने लारावेल एरर हैंडलिंग की जांच की है और समाधान के लिए भी गूगल किया है। लेकिन जितना अधिक मैंने खोजा मैं समाधान के लिए भ्रमित हो रहा हूं। चूंकि एप्लिकेशन पहले से ही उत्पादन पर है, मैं अपवादों को संभालने के लिए प्रत्येक नियंत्रक में परिवर्तन नहीं कर सकता। मैं अनुमान लगा रहा हूं, मुझे केवल ऐप/अपवाद/हैंडलर क्लास में बदलाव करने की ज़रूरत है, लेकिन यह सुनिश्चित नहीं है कि यह कैसे काम करेगा।

फॉर्म खोज मुझे मिला है कि मुझे हैंडलर क्लास में बदलाव करना है:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Throwable  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Throwable $exception)
{
    if ($exception instanceof CustomException) {
        return response()->view('errors.site_down', [], 500);
    }

    return parent::render($request, $exception);
}

व्यूएक्सप्शन होने पर उपरोक्त कोड नहीं दिख रहा है।

मैंने देखा है कि .env में APP_DEBUG सत्य है और config/app में यह गलत है। क्या यह प्रभावित करता है?

सभी अपवाद या त्रुटियाँ साइट_डाउन पृष्ठ पर कैसे पुनर्निर्देशित होंगी? कृपया मुझे लार्वा में अपवाद और त्रुटि प्रबंधन का मार्गदर्शन करें। मैं और अधिक भ्रमित हो रहा हूँ।

अग्रिम में धन्यवाद।

0
ganesh 2 जुलाई 2020, 12:39

3 जवाब

resources/views/errors/503.blade.php पर एक ब्लेड पेज जोड़ें

आप vendor:publish Artisan कमांड का उपयोग करके Laravel के एरर पेज टेम्प्लेट को प्रकाशित कर सकते हैं। एक बार टेम्प्लेट प्रकाशित हो जाने के बाद, आप उन्हें अपनी पसंद के अनुसार कस्टमाइज़ कर सकते हैं:

php artisan vendor:publish --tag=laravel-errors

यह आदेश आपके सभी कस्टम त्रुटि पृष्ठ को resources/views/errors/ निर्देशिका पर बनाएगा। आप अपनी इच्छानुसार अनुकूलित कर सकते हैं।

आधिकारिक दस्तावेज़ देखें यहां

1
STA 2 जुलाई 2020, 13:09
आप 401, 403, 404, 419, 429,500,503 के लिए भी ऐसा कर सकते हैं।
 – 
STA
2 जुलाई 2020, 13:07
1
हां, आपका समाधान बहुत बेहतर है, त्रुटियों को उसी तरह संभालें लेकिन केवल "वही" दृश्य प्रस्तुत करें।
 – 
Kurt Friars
2 जुलाई 2020, 13:43

कस्टम अपवादों के लिए सबसे पहले आपको अपवाद फ़ोल्डर App\Exceptions\CustomException.php में एक कस्टम अपवाद फ़ाइल बनानी होगी

<?php

namespace App\Exceptions;

use Exception;

class CustomException extends Exception
{
    //
}

फिर आपके अपवाद हैंडलर फ़ाइल में App\Exceptions\Handler.php

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use App\Exceptions\CustomException as CustomException;
use Throwable;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param  \Throwable  $exception
     * @return void
     */
    public function report(Throwable $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Throwable  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Throwable $exception)
    {
        // Thrown when a custom exception occurs.
        if ($exception instanceof CustomException) {
            return response()->view('error.page.path', [], 500);
        }

        // Thrown when an exception occurs.
        if ($exception instanceof Exception) {
            response()->view('errors.page.path', [], 500);
        }

        return parent::render($request, $exception);
    }
}

use App\Exceptions\CustomException; कस्टम अपवाद फ़ाइल को याद रखें जहां आपको कभी भी कस्टम अपवाद फेंकने की आवश्यकता हो:

use App\Exceptions\CustomException;

function test(){
    throw new CustomException('This is an error');
}
0
Bobby Axe 2 जुलाई 2020, 12:59

बस अगर कथन से छुटकारा पाएं:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Throwable  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Throwable $exception)
{
    return response()->view('errors.site_down', [], 503);
}

यदि आप यह दावा करने का प्रयास कर रहे हैं कि साइट रखरखाव के लिए बंद है, तो आप शायद 503 भी वापस करना चाहेंगे।

इस दृष्टिकोण की आलोचना में, मुझे लगता है कि यह दावा करना आपके उपयोगकर्ताओं के लिए बेईमान और पारदर्शी है कि साइट आपकी त्रुटियों के लिए रखरखाव में है, और यह लंबे समय में खुद को भुगतान नहीं करेगा।

1
Kurt Friars 2 जुलाई 2020, 12:49
अगर मैं अपने App\Exceptions\Handler.php में return parent::render($request, $exception); के बजाय return response()->view('errors.site_down'); का उपयोग करता हूं, तो क्या यह एप्लिकेशन की कार्यक्षमता को प्रभावित करता है? मुझे उस site_down पृष्ठ को विशेष error_code जैसे 500,503 आदि को दिखाने की आवश्यकता नहीं है। मुझे आने वाले सभी अपवादों के लिए इसका उपयोग करने की आवश्यकता है ताकि आगंतुक डेवलपर का कोड न देख सकें।
 – 
ganesh
2 जुलाई 2020, 13:37
हां, लेकिन आप अभी भी एक प्रतिक्रिया कोड लौटा रहे होंगे। और यदि आप यह दावा करने का प्रयास कर रहे हैं कि यह रखरखाव के लिए बंद है, तो इसके लिए 503 कोड है।
 – 
Kurt Friars
2 जुलाई 2020, 13:40
और मैं आपको यह बताने के लिए पर्याप्त विशेषज्ञ नहीं हूं कि कौन सी कार्यक्षमता अवरुद्ध हो सकती है, मेरी सबसे बड़ी चिंता त्रुटि लॉगिंग के बारे में होगी।
 – 
Kurt Friars
2 जुलाई 2020, 13:42
अगर php artisan down तो यह 503 . जाएगा
 – 
STA
2 जुलाई 2020, 13:48
फ्रायर्स सॉरी, मुझे आपकी पहली टिप्पणी नहीं मिली। क्या मैं Handler.php के return को बदल सकता हूँ? असल में मुझे पता चला कि जब आपके एप्लिकेशन में कोई त्रुटि आती है, तो आपको रिक्त पृष्ठ मिलना शुरू हो सकता है, यदि आप हेन्डलर.php को गड़बड़ करते हैं तो मैं ऐसा करने से थोड़ा डरता हूं।
 – 
ganesh
2 जुलाई 2020, 14:05