1masoud
5 سال پیش توسط 1masoud مطرح شد
11 پاسخ

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

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

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1'

ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

درود

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


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

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


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

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


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 5 سال پیش آپدیت شد
0

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

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
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
0

@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
تخصص : Software engineer
@khanzadimahdi 5 سال پیش مطرح شد
0

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

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

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

    $this->validate($request, $rules, $customMessages);

1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
0

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

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

اما جواب نداد


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 5 سال پیش مطرح شد
0

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

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

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

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

1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش آپدیت شد
0

@khanzadimahdi
باز نشد

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

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

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