راکت

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

11 پاسخ

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

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1'
1masoud
1masoud
@masoudproton
ثبت پرسش جدید

پاسخ‌ها

11
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

درود

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

1masoud
1masoud
@masoudproton

تخصص: php,laravel

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

شاید پاسخ شما همین‌جا باشد

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

1masoud
1masoud
@masoudproton

تخصص: php,laravel

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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
1masoud
@masoudproton

تخصص: 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
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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

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

    $this->validate($request, $rules, $customMessages);
1masoud
1masoud
@masoudproton

تخصص: php,laravel

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

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

اما جواب نداد

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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

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

'font_color' => 'min:0|max:7|unique:table_name,font_color',
1masoud
1masoud
@masoudproton

تخصص: php,laravel

@khanzadimahdi
باز نشد

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

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

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