
روت مدل بایندینگ Route Model Binding در لاراول چیست؟
Route Model Binding در لاراول امکانی فراهم می کند تا بتوان یک نمونه از مدل Model را در Route تزریق کرد. در Laravel ارتباط کاربران با برنامه یا اپلیکیشن یا سایت از طریق فایل های view و route ها می باشد. اگر بخواهیم مفهوم استفاده از مدل در route را به درستی بیان کنیم باید بدانیم Request چیست؟
در فایل های view هر لینک یا دکمه ای که مشاهده می کنید، در واقع یک route برایش تعریف شده است. شما با هر کلیک یک درخواست یا Request ارسال می کنید اما چون پشت هر دکمه، لینک و آدرسی ( تگ a، دکمه submit و …) یک روت route تعریف شده است، درواقعیت درخواست یا Request شما به Route ها سپرده و واگذار می شود.
وظیفه Route ها تصمیم گیری درمورد درخواست شماست. بدین صورت که request را به مقصدی که برایش تعریف کرده اند، می فرستد. این مقصد می تواند یک متد در یک Controller و یا یک Closure باشد که بستگی به تعریف route توسط برنامه نویس دارد. درخواست ها در مقصد پردازش خواهند شد. اما نکته جالب این است که ما میتوانیم یک یا چند پارامتر را هم با request به route بفرستیم. مثلا فرض کنیدیک تگ a داریم که href آن اینگونه تعریف شده است:
<a href="/posts/1">نمایش پست </a>
و در فایل web.php این روت یا مسیر را با یک Closure اینگونه تعریف کرده ایم:
Route::get('/posts/{id}', function($id){ dd($id); });
اگر سرور لارول run باشد (php artisan serve) و کاربر روی لینک کلیک کند یا در آدرس بار مرورگر تایپ کند عبارت “1”در صفحه چاپ خواهد شد. در مثال بالا ما یک پارامتر تحت عنوان id را در لینک قرار دادیم. کاربر با کلیک بر روی آن، این پارامتر را از طریق request به route منتقل کرد. route نیز این پارامتر را به Closure انتقال داد تا پردازش شود. در کلوژر پردازش ما به این صورت شد که از پارامتر id، dye and dump یا dd() گرفتیم تا پارامتر را نشان بدهیم.
اساس کار Route Model Binding یا تزریق model در route
ما توانستیم داده ای را از طریق Route انتقال دهیم پس همچنین می توانیم id هر پست را به پردازشگر مقصد، انتقال دهیم تا post با id مورد نظر از database گرفته شود. حال فرض کنید تمام پست هایی که در جدول posts موجود است به صورت لیست در یک صفحه آورده شده و ما میخواهیم با کلیک بر روی هر یک، اطلاعات پست مربوطه را ببینیم. برای این کار باید برای هر کدام از پست ها تگ a اینگونه تعریف شود:
<a href="/posts/{{$post->id}}" >نمایش پست</a>
(Id هر پست به Route انتقال داده می شود.) و در فایل web.php، مسیر یا Route مربوط به این لینک را اینگونه تعریف می کنیم:
Route::get('/posts/{post_id}', function($post_id){ $post = Post::findOrFail($id); dd($post); });
با این کد اطلاعات هر پست به محض کلیک روی لینکش، نمایش داده خواهد شد. این کد کاملا صحیح بوده و کار خواهد کرد، اما Laravel پا فراتر گذاشته و امکانات جالبی برایمان فراهم ساخته است که به عنوان Route Model Binding از آن یاد می شود. به این صورت که ما میتوانیم به جای تزریق id پست به route و سپس جستجوی پست با id مربوطه در دیتابیس، خود پست را بهroute تزریق کنیم و در کنترلر (Controller) یا Closure (کلوژر)، post با همان id را دریافت کنیم :
Route::get('/posts/{post}', function(App\Post $post){ dd($post); });
نتیجه و جواب هر دو کد بالا یکی است اما کد دوم خوانا تر، زیباتر و کوتاه تر است. به این کار Route Model Binding می گویند. درواقع مدل را به روت تزریق کردیم. لاراول به قدری هوشمند است که به محض خواندن کد دوم، میداند که باید با ID ها کار کند اما در پشت پرده. لاراول می فهمد که پیدا کردن $post نیازمند جستجو در ستون id جدول posts است. پس خودلاراول، کد اول را در پشت صحنه اجرا می کند:
$post = Post::findOrFail($id);
استفاده از Route Model Binding
استفاده از Route Model Binding یا inject model into route بسیار راحت است اما باید 3 قانون زیر را رعایت کرد:
- نام پارامتر route که داخل علامت {} درج می شود باید با نام MODEL همخوانی داشته باشد، یعنی نام پارمتر باید همان نام مدل باشد اما با حرف اول کوچک. مثلا در مورد مدل User، نام پارامتر بایدuser باشد.
- استفاده از type hint. یعنی نام مدل و نام پارامتر هر دو در ورودی Closure یا متد کنترلر درج شود:
function(App\Post $post)
- نام پارامتر route همان {post} با نام پارامتر کلوژر، $post ، باید برابر باشد.
مزایای استفاده از Route Model Binding
- کد های زیباتر
- حجم کد کم یا تعداد کد های کمتر
در بسیاری از منابع و مراجع آموزشی، تعاریف زیر دیده می شوند:
Route Model Binding چیست؟ چسباندن مدل به روت یا اتصال Model به Route
مغهوم Route Model Binding چیست؟ تزریق Model به) Route تزریق مدل در روت(
معنی Route Model Binding چیست؟ استفاده از Model در Route
معنی و مفهوم Route Model Binding چیست؟ پس کردن Model به Route یا تزریق نمونه ای از Model یه Route
معنی و مفهوم Route Model Binding چیست؟ استفاده از مدل در route
معنی و مفهوم Route Model Binding چیست؟ استفاده از مدل در روت
شما بعد از مشاهده این جلسه آموزشی و مثال های آن، قادر خواهید بود به راحتی، مفهوم زیبا و جادویی route model binding را در سرتاسر سایت، برنامه یا اپلیکیشن لاراولی تان پیاده کرده و کدهای زیباتر و در عین حال با حجم کمتر بنویسید. شما خواهید توانست در متد های show create update delete و… از این امکان به خوبی و آسانی استفاده کنید.
منابع:
1. https://laravel.com/docs/5.8/routing
2. https://scotch.io/tutorials/cleaner-laravel-controllers-with-route-model-binding
3. https://vegibit.com/route-model-binding-in-laravel/
4. https://medium.com/@winni4eva/laravels-route-model-bindings-f051b088e542
5. https://laracasts.com/series/laravel-from-scratch-2017/episodes/9
برای مشاهده جلسه یازدهم ( ویرایش EDIT، حذف DELETE و بروزرسانی UPDATE رکورد ) کلیک کنید.
مشخصات فیلم آموزشی
نام اثر : فیلم آموزش صفر تا صد لاراول – جلسه دهم: آموزش روت مدل بایندینگ Route Model Binding در لاراول 6
مدرس : مهندس سالار عباپور
مدت زمان : 27 دقیقه
زبان آموزش : فارسی
حجم فایل : یک فایل با حجم 40 مگا بایت
فرمت ویدئو : MP4 با کیفیت بالا
پیش نمایش
درباره محصول
فیلم آموزش صفر تا صد لاراول – جلسه دهم: آموزش روت مدل بایندینگ Route Model Binding در لاراول 6 محصولی است که در این پست به آن پرداخته شده است. در این آموزش به توضیح و معرفی تزریق model در route یا استفاده از مدل در روت پرداخته شده و طریقه استفاده از model در route کامل توضیح داده شده است. این محصول بصورت کامل توسط گروه پشتیبانی پی استور تست و بازبینی شده است. محصول دارای نشان تضمین کیفیت پی استور می باشد.
تاریخ انتشار: | 16 مهر 1398 |
---|---|
تاریخ بروزرسانی: | 12 خرداد 1399 |
حجم فایل: | 40 مگابایت |
فرمت فایل | mp4 |
نسخه: | 1.0 |
شناسه اثر: | ندارد |
هماهنگی با: | laravel7 |
تاکنون 2 نفر این محصول را تهیه کرده اند و 2 نظر برای آن ثبت شده است.
نظرات و دیدگاه ها
قوانین ثبت دیدگاه
- لطفاً دیدگاه های خود را فارسی تایپ کنید.
- دیدگاه های نامرتبط به مطلب تایید نخواهد شد.
- از درج دیدگاه های تکراری پرهیز نمایید.
- سوالات تخصصی خودتان را از طریق تیکت پشتیبانی مطرح کنید.
قیمت 29,000 تومان
تاریخ انتشار: | 16 مهر 1398 |
---|---|
تاریخ بروزرسانی: | 12 خرداد 1399 |
حجم فایل: | 40 مگابایت |
فرمت فایل | mp4 |
نسخه: | 1.0 |
شناسه اثر: | ندارد |
هماهنگی با: | laravel7 |
2 بازخورد (مشاهده نظرات)
قیمت: 29,000 تومان
sina
آموزش جامعی بود. ممنون مهندس
مدیریت و پشتیبانی
نظرات و پیشنهادات خود را با ما در میان بگذارید.