@ali.bayat
@Alimotreb
من میخوام ارور خودم رو به جای ارور سیستم نشون بدم ارور سیستم اینه
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1'
درود
این یه ارور در سطح دیتابیس هست. احتمالا باید کوئری رو تغییر بدید .. اما کاری که میتونی بکنی استفاده از Exception هاست. کوئری رو در بلاک try قرار بده و در قسمت catch میتونی ارور رو به عنوان یه Exception دیگه throw کنی و خطا رو در برنامه مدیریت کنی
به مستندات PHP در مورد Exception ها مراجعه کنید
https://www.php.net/manual/en/language.exceptions.php
@ali.bayat
اینو میدونم یک قسمت در لاراول هست به نامexceptionمیخوام اونجا اضافه کنم فایلی به نامhandlerداره اونجا میخوام اضافه کنم چطوری میشه اضافه کرد
سلام. از ولیدیشن استفاده کن. در قسمت اخر ولیدیشن یونیک بودن رو چک کن.
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 برای نشون دادنش استفاده کنید.
@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تکراری بود یک ارور سفارشی نمایش بده میشه با کد بگید
متد validate یه پارامتر سوم هم میگیره که ترجمه یا متن مورد نظر شما هست. به مثال زیر دقت کنید
$rules = [
'name' => 'required',
'email' => 'required|email',
'message' => 'required|max:250',
];
$customMessages = [
'required' => 'The :attribute field is required.'
];
$this->validate($request, $rules, $customMessages);
@khanzadimahdi
این قضیه برای خالی بودن رو چک میکنه من برای تکراری بودن رو نوشتم اما اجرا نکرد و همون ارور بالای صفحه رو نمایش داد
public function rules()
{
return [
'heading_id'=>'unique',
];
}
public function message()
{
return [
'unique'=>':attribute تکراری هست'
];
}
اما جواب نداد
چون ولیدیشنی که نوشتی مشکل داره اصلا اجرا نمیشه.
'font_color' => 'min:0|max:7|unique',
طریقه استفاده از unique اینجوری که نوشتی نیست. اولا باید اسم جدولشو مشخص کنی که شما هیچی نذاشتی. دوما باید اسم فیلدی که میخوای مقایسه بشه رو مشخص کنی که اونم ننوشتی. از کجا بفهمه چی و کجا باید یونیک باشه؟ یه چیزی مثل زیر باید باشه:
'font_color' => 'min:0|max:7|unique:table_name,font_color',
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟