مهدی
3 سال پیش توسط مهدی مطرح شد
7 پاسخ

error handling

سلام خدمت دوستان یه سوالی داشتم اونم اینه که چه موقعی باید از بحث ارور هندلینگ استفاده کرد چون تا جایی که من چک کردم لاراول به صورت پیش فرض تمام ارور های ما رو پوشش میده از ارور های ۴۰۰ و... پس چه زمانی ما باید از این موضوع استفاده کنیم
@erfanmohseni406
@hosseinshirinegad98


ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش آپدیت شد
1

در پوشه views لاراول یه پوشه به نام errors بسازید بعد برای مدریت هر Exception یه ویو با کد همون خطا ایجاد کنید برای مثال زمانی که از متدهای firstOrFail یا findOrFail استفاده میکنیم اگه دیتای مورد نظر پیدا نشه خطا با کد 404 نشون داده میشه برای مدریت این خطا در پوشه ای که عرض کردم یه فایل با نام 404.blade.php ایجاد میکنی و پیام مورد نظرتو درش مینویسی هر زمان تو برنامت خطای 404 داده شد این ویو توسط لاراول خودکار بارگزاری میشه
یا میتونی در پوشه Exceptions فایل Handler.php متد register رو برای هر استثنایی به صورت زیر بنویسی
ابتدا هر چیزی داخل متد register هست رو پاک کن بعد اینطوری خطاهارو مدریت کن

   $this->renderable(function (ModelNotFoundException $e, $request) {
            if ($request->wantsJson()) {
                return response([
                    'status' => 'error',
                    'messages' => 'Object not found',
                ], Response::HTTP_NOT_FOUND);
            }  else {
                return view('errors.404');
            }
        });

دقت کن در قسمت اول if چک شده که اگه استثنا در قسمت api رخ بده ما بجای ویو باید یه پاسخ جیسان به کاربر برگردونیم (در api نویسی ما که ویو بر نمیگردونیم و همیشه پاسخ ها رو به صورت جیسان برمیگردونیم)اما اگر استثنا در قسمت وب اپ ما رخ داد میتونیم یه ویو به کاربر نشان بدیم
متد wantsJson مشخص میکنه که کاربر برای استثنای رخ داده شده جیسان میخواد یا نه یک ویو میخواد به کاربر نشان بده


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

سلام لاراول پوشش میده ولی برای سفارشی سازی پیامهای ارورها شما باید پیام دلخواه یا فارسیتونو در سایت نشون بدین به همین خاطر بحث شخصی سازی پیامهای ارور به میان میاد اگه برنامتون دارایapiهست خب مقداری هندل کردن ارورها متفاوتر میشه اما در بخش وب برنامتون به راحتی میتونید برای هر ارور یه ویو درست کنید اما زمان استفاده ازapiبرای هر ارور باید یه ریسپانس جیسان به کاربر برگردونید
تفاوت این دورو متوجه میشوید
در بخش وب برنامتون برای هر ارور میتونید یه ویو نمایش بدین تما در بخش apiباید جیسان بدین


مهدی
@MM20001378 3 سال پیش مطرح شد
0

میشه یه مثال یا یه منبع معرفی کنید که ببینم چجوری باید پیام هارو فارسی نشون بدم؟
@hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش آپدیت شد
1

در پوشه views لاراول یه پوشه به نام errors بسازید بعد برای مدریت هر Exception یه ویو با کد همون خطا ایجاد کنید برای مثال زمانی که از متدهای firstOrFail یا findOrFail استفاده میکنیم اگه دیتای مورد نظر پیدا نشه خطا با کد 404 نشون داده میشه برای مدریت این خطا در پوشه ای که عرض کردم یه فایل با نام 404.blade.php ایجاد میکنی و پیام مورد نظرتو درش مینویسی هر زمان تو برنامت خطای 404 داده شد این ویو توسط لاراول خودکار بارگزاری میشه
یا میتونی در پوشه Exceptions فایل Handler.php متد register رو برای هر استثنایی به صورت زیر بنویسی
ابتدا هر چیزی داخل متد register هست رو پاک کن بعد اینطوری خطاهارو مدریت کن

   $this->renderable(function (ModelNotFoundException $e, $request) {
            if ($request->wantsJson()) {
                return response([
                    'status' => 'error',
                    'messages' => 'Object not found',
                ], Response::HTTP_NOT_FOUND);
            }  else {
                return view('errors.404');
            }
        });

دقت کن در قسمت اول if چک شده که اگه استثنا در قسمت api رخ بده ما بجای ویو باید یه پاسخ جیسان به کاربر برگردونیم (در api نویسی ما که ویو بر نمیگردونیم و همیشه پاسخ ها رو به صورت جیسان برمیگردونیم)اما اگر استثنا در قسمت وب اپ ما رخ داد میتونیم یه ویو به کاربر نشان بدیم
متد wantsJson مشخص میکنه که کاربر برای استثنای رخ داده شده جیسان میخواد یا نه یک ویو میخواد به کاربر نشان بده


مهدی
@MM20001378 3 سال پیش مطرح شد
0

بعد اگر بخوام داده هارو بصورت جیسون برگردونم اون هم به همین شکله یا تفاوت داره
@hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

در ادامه پاسخ قبلی گفته شده


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
مهدی
@MM20001378 3 سال پیش مطرح شد
1

ممنون خیلی لطف کردید
@hosseinshirinegad98


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام