قرار دادن ارور خود به جای ارور سیستم

- 1 هفته پیش
توسط 1masoud آپدیت شد
1masoud ( 14880 تجربه )
1 هفته پیش
تخصص : php,laravel

@ali.bayat
@Alimotreb
من میخوام ارور خودم رو به جای ارور سیستم نشون بدم ارور سیستم اینه

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1'
علی بیات ( 193487 تجربه )
1 هفته پیش
تخصص : توسعه دهنده ارشد وب

درود

این یه ارور در سطح دیتابیس هست. احتمالا باید کوئری رو تغییر بدید .. اما کاری که میتونی بکنی استفاده از Exception هاست. کوئری رو در بلاک try قرار بده و در قسمت catch میتونی ارور رو به عنوان یه Exception دیگه throw کنی و خطا رو در برنامه مدیریت کنی

1masoud ( 14880 تجربه )
1 هفته پیش
تخصص : php,laravel

@ali.bayat
میشه بیشتر توضیح بدی و در پوشه exceptionباید نوشت

علی بیات ( 193487 تجربه )
1 هفته پیش
تخصص : توسعه دهنده ارشد وب

به مستندات PHP در مورد Exception ها مراجعه کنید
https://www.php.net/manual/en/language.exceptions.php

1masoud ( 14880 تجربه )
1 هفته پیش
تخصص : php,laravel

@ali.bayat
اینو میدونم یک قسمت در لاراول هست به نامexceptionمیخوام اونجا اضافه کنم فایلی به نامhandlerداره اونجا میخوام اضافه کنم چطوری میشه اضافه کرد

علی بیات ( 193487 تجربه )
1 هفته پیش
تخصص : توسعه دهنده ارشد وب

برای لاراول هم مستندات زیر:
https://laravel.com/docs/6.x/errors

mahdi khanzadi ( 50377 تجربه )
1 هفته پیش
تخصص : برنامه نویس سمت سرور

سلام. از ولیدیشن استفاده کن. در قسمت اخر ولیدیشن یونیک بودن رو چک کن.

required|unique:users,email

مثلا در بالا بررسی میکنه در جدول یوزر دیتای مرتبط با ایمیل یونیک باشه همیشه در صورتی که یونیک نباشه از ساخته شدن رکوردش جلوگیری میکنه . میتونی یه متن هم بهش اختصاص بدی که ترجمه کنه ارور رو. قسمت مربوط به ولیدیشن رو مطالعه کن یه قسمت message هم میگیره.
اما اگه میخوای ارورش رو به صورت کلی تغییر بدی به مسیر زیر برو

app\Exceptions\Handler.php

داخل تابع render رو به صورت زیر تغییر بده:

    public function render($request, Exception $exception)
    {
        // handle database errors
        if ($exception instanceof QueryException) {
            return redirect()->back()->withErrors(['database' => 'error has happened in database']);
        }

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

حالا توی صفحه مثل حالتی که ارور های ولیدیشن رو نشون میدین این ارور رو میتونید نشون بدید . از کلید database برای نشون دادنش استفاده کنید.

1masoud ( 14880 تجربه )
1 هفته پیش
تخصص : php,laravel

@khanzadimahdi
کد من اینه

  $valiDate = $this->validate($request, [
            'admin_id'=>'',
            'form_id' => 'min:0|max:7',
            'color_scheme' => 'min:0|max:7',
            'page_color' => '',
            'page_image' => 'mimes:jpeg,jpg,bmp,png|max:300',//330کیلو بایت  هست
            'form_color' => 'min:0|max:7',
            'font_color' => 'min:0|max:7|unique',
            'input_background' => 'min:0|max:7',
        ]);

میخوام زمانی که فیلد font_colorتکراری بود یک ارور سفارشی نمایش بده میشه با کد بگید

mahdi khanzadi ( 50377 تجربه )
1 هفته پیش
تخصص : برنامه نویس سمت سرور

متد validate یه پارامتر سوم هم میگیره که ترجمه یا متن مورد نظر شما هست. به مثال زیر دقت کنید

$rules = [
        'name' => 'required',
        'email' => 'required|email',
        'message' => 'required|max:250',
    ];

    $customMessages = [
        'required' => 'The :attribute field is required.'
    ];

    $this->validate($request, $rules, $customMessages);
1masoud ( 14880 تجربه )
1 هفته پیش
تخصص : php,laravel

@khanzadimahdi
این قضیه برای خالی بودن رو چک میکنه من برای تکراری بودن رو نوشتم اما اجرا نکرد و همون ارور بالای صفحه رو نمایش داد

 public function rules()
    {
        return [
            'heading_id'=>'unique',
        ];
    }
    public function message()
    {
        return [
            'unique'=>':attribute تکراری هست'
        ];
    }

اما جواب نداد

mahdi khanzadi ( 50377 تجربه )
1 هفته پیش
تخصص : برنامه نویس سمت سرور

چون ولیدیشنی که نوشتی مشکل داره اصلا اجرا نمیشه.

'font_color' => 'min:0|max:7|unique',

طریقه استفاده از unique اینجوری که نوشتی نیست. اولا باید اسم جدولشو مشخص کنی که شما هیچی نذاشتی. دوما باید اسم فیلدی که میخوای مقایسه بشه رو مشخص کنی که اونم ننوشتی. از کجا بفهمه چی و کجا باید یونیک باشه؟ یه چیزی مثل زیر باید باشه:

'font_color' => 'min:0|max:7|unique:table_name,font_color',
1masoud ( 14880 تجربه )
1 هفته پیش
تخصص : php,laravel

@khanzadimahdi
باز نشد

':font_color' => 'min:0|max:7|unique:t,id',
برای ارسال پاسخ باید وارد سایت شوید