سلام
سامان جان شما به خاطر این از لاراول استفاده میکنید که MVC هست اول از همه باید عرض کنم کدهای شما هر چقدر هم درست باشه از نظر من و هر کسی که لاراول کار میکنه غلطه چون که شما اصلا معماری MVC رو رعایت نکردین و کلا کارتون اشتباهه.چون من تو کد هاتون Model نمیبینم
دومین راهنمایی که میتونم بهتون بدم اینه که میتونید از قسمت setting---font رو تغییر بدین فونت Fira Code بهترین انتخاب برای نمایش بهتر کاراکتر های فارسی هست
کدهای شما برای ذخیره به این صورت خواهد بود
مدل خودمون رو میسازیم و اگر نیازی برای رابطه در دیتابیس ها بود در این قسمت ایجاد میکنیم و مقایری که نیاز هست رو برای دیتابیس ارسال بشه رو اینجار در fillable ذکر میکنیم
=========== Model===========
protected $fillable = [
'name',
'description',
'image',
'tags',
'price',
'status',
'category_id',
];
/// Example
حالا نوبت کنترلر خودمون هست که بسازیم در متد Store ما ابتدا نیاز داریم یک متغیر تعریف کنیم و یک آبجکت جدید میسازیم البته من در اینجا اعتبارسنجی ها رو نمیگم. بعد دستورات خودمون رو باید داخل try ,catch میندازیم تا به نحوی خطاهای خودمون رو هندل یا مدیریت کنیم.
در اینجا ما شئی جدید از دیتابیس که به نام محصول یا product ساخته بودیم رو بتا دستور create میگیم که این رو بساز اما چه چیزی رو برای ما باید بسازه ؟؟؟ خب مسلم هست ما چه چیزی رو میخوایم در دیتا بیس ایجاد کنیم ما میخواهیم درخواست هایی که از طرف یک انسان در فرم ما ارسال میشه رو در قالب یک ستون در پایگاه داده خودمون بسازیم و ثبت کنیم .پس میگوییم همه درخواست هایی که به طرف شما ارسال میشود را ثبت کن (اشاره به کد داخل try )
سپس خطاهایی که وجود دارد رو میتوینم جوری باهاشون برخورد کنیم که کاربر نبیته چون شکل بهتری داشته باشه سایت ما پس من اومدم از Exeption استفاده میکنم .و میگم اگر شما با خطای 23000 دیتا بیس مواجه شدی بیا و یک پیامی به صفحه alert من بفرست . پیام هم داخل متغیر msg قرار دادم . در غیر این صورت من پیامی موفقیت آمیز به صفحه هشدار میفرستیم.
=========== Controller ===========
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'price' => 'number',
]);
$product = new Product();
try {
$product->create($request->all());
} catch (Exception $exception) {
switch ($exception->getCode()) {
case '23000' :
$msg = 'مقدار تکراری و عدم ثبت در دیتابیس';
return redirect(route('product.index'))->with('warning', $msg);
}
}
$msgsuccess = 'با موفقیت انجام شد';
return redirect(route('product.index'))->with('success', $msgsuccess);
}
حالا من نیاز به روت دارم برای مسیر دهی به صفحاتم پس به این دو صورت میتونم عمل کنم. روت ها مباحث ساده ای هستن نیاز به توضیح ندراه.
=========== Routing ===========
Route::group(['prefix' => '/admin/product', 'middleware' => 'auth'], function () {
//////Routes
});
========Or =========
Route::resource('product', 'ProductController')->except([
'create', 'store', 'update', 'destroy'
]);
این صفحه هشدرا های من هست اگر به مباحث error handeling در مستندات لاراول نگاه کنید هست نکته این هست اگر در کنترلر نگاه کنید ما دو عدد session به این صفحه تحت عنوان Warning , Success فرستادیم و برای آن ها استایل هایی متفاوت هم میتوانیم تعریف کنیم.
=========== صفحه ای برای نمایش ارورها در سایت ===========
@if ($errors->any())
@foreach ($errors->all() as $error)
<ul>
<li style="color: red;margin: 1rem;" class="font_bold">{{ $error }}</li>
</ul>
@endforeach
@endif
@if (session('warning'))
<h3 style="color: green; text-align: center;" class="font_bold"> {{session('warning')}} </h3>
@endif
@if (session('success'))
<h3 style="color: green; text-align: center;" class="font_bold"> {{session('success')}}</h3>
@endif
حالا برای نمایش ارور ها در داخل blade به این صورت عمل میکنیم کافی است برای نمایش خطا ها ما صفحه blade خطا ها را incloud کنیم .
نمایش خطا ها در ویو
@incloud('alert.alert')
فرم برای ارسال داده
<form meethod="POST" action="{{route('store')}}">
@csrf
///Inputs
</form>
مهم ترین نکته در اینجا کنترلر بود که با کمی دقت به روند کارش پی میبری .
موفق باشین