مسیریابی در لاراول و آموزش استفاده از Router



visibility  
mode_comment   ۰

در مقالات قبل با لاراول و شیوه نصب آن آشنا شدیم. همینطور در مقاله Routing چیست به معرفی روتینگ در شبکه و مکانیزم آن پرداختیم. اگر این مقاله را نخوانده اید پیشنهاد می کنیم قبل از خواندن این آموزش آن مقاله را مطالعه کنید. لاراول هم دارای یک نوع سیستم روتینگ در داخل خود است. در این آموزش می خواهیم شما را با بعضی امکانات پرکاربرد آن آشنا کنیم. پس تا پایان این مطلب با ما همراه باشید.

آموزش routing در لاراول

روت در لاراول چیست

روت راهی برای ایجاد مسیر ها یا URL ها در اپلیکیشن شما است. مثلا وقتی می خواهیم یک مسیر مثل https://7learn.com/articles ایجاد کنیم باید یک روت به مسیر /articles بسازیم. لازم نیست این URL حتما یک فایل را باز کند. نکته مثبت در مورد این نوع URL ها که به آن ها URL تمیز (Clean Url) می گوییم این است که به راحتی قابل خواندن و به خاطر سپردن هستند. بنابراین با سئو نیز سازگاری بالایی دارند.

از لاراول 5.5 به بعد روت ها در پوشه routes لاراول ذخیره شدند. روت هایی که برای وب سایت ایجاد می کنیم در فایل web.php و روت های API های سایت در فایل api.php در پوشه routes ذخیره می شوند. وقتی لاراول را نصب می کنید، دو روت به طور پیشفرض، یکی در فایل web.php و یکی در api.php ساخته می شود. ما در این آموزش با روت های فایل web.php سر و کار داریم. روتی که در فایل web.php ساخته می شود به این شکل است:

در کد بالا یک روت به مسیر صفحه خانه یا homepage ایجاد شده است. با این روت هر بار که روتر لاراول یک درخواست از نوع get به مسیر / یا در واقع https://7learn.com/ دریافت می کند، ویویی (view) با نام welcome فراخوانی می شود. در مورد ویو ها در مقاله آشنایی با فریمورک لاراول صحبت کرده ایم. اگر اطلاعات کافی در این مورد ندارید حتما اول آن مطلب را مطالعه کنید.

ساختار یک روت ساده

ساختار یک روت در لاراول بسیار ساده است. برای ساخت یک روت برای وب سایت کافی است فایل web.php را باز کنید و با استفاده از Route:: شروع به ساخت روت جدید کنید. سپس باید نوع درخواستی که قصد دارید روت آن را بپذیرد وارد کنید. به این درخواست ها ورب (Verbs) های HTTP می گوییم. روتر لاراول می تواند این ورب ها را بپذیرد:

  • Get
  • Post
  • Put
  • Delete
  • Patch
  • Options

در پایان، تابعی که می خواهید با دریافت درخواست به URL فراخوانی شود را ایجاد می کنید.

info نکته :

توجه: برای ارسال درخواست های HTTP از نوع POST، DELETE و PUT باید حتما یک توکن CSRF به همراه آن بفرستید. برای دیدن اطلاعات بیشتر در مورد توکن های CSRF می توانید به مستندات لاراول مراجعه کنید.

مثلا در کد پایین ما یک روت به مسیر https://7learn.com/about ایجاد کرده ایم:

در این کد ما یک روت به آدرس https://7learn.com/about تعریف کردیم و با دستور echo کاری کردیم که متن About Us را نمایش بدهد. البته برای تعریف عکس العمل یا اکشن (Action) روت می توانید به جای استفاده از تابع Callback مسیر متدی از یک کنترلر را بدهید. مثلا فرض کنید یک کنترلر به نام PageController ساخته و متدی با نام showAbout در آن تعریف کرده ایم. می توانیم روت بالا را به این صورت بازنویسی کنیم تا متد showAbout نقش نمایش دهنده اطلاعات در آن را ایفا کند.

ارسال پارامتر با استفاده از روت

فرض کنید می خواهید کاربران از طریق راهی، پارامتری را به URL چسبانده و اطلاعاتی را به تناسب آن دریافت کنند. فریمورک لاراول راهی را برای انجام این کار در اختیار شما قرار می دهد. برای ارسال پارامتر می توانید به راحتی نام آن را به صورت  {name} به URL بچسبانید. به مثال زیر دقت کنید:

در کد بالا یک پارامتر را به روت چسبانده ایم که به آن پارامتر روت (Route Parameter) می گوییم. از این لحظه به بعد هر کاربری که یک پارامتر را به عنوان درخواست به مسیر https://7learn.com/articles/ بچسباند، می تواند آن عدد را مشاهده کند. به عنوان مثال اگر مسیر https://7learn.com/articles/2 را وارد کنید، عدد 2 نمایش داده می شود.

اما اگر بیشتر از یک پارامتر داشته باشیم پارامترها به ترتیب چیدمان به عنوان آرگومان به تابع اکشن ارسال می شوند. به این مثال توجه کنید:

در این مثال به ترتیب قرارگیری پارامترها، آرگومان ها ارسال می شوند. به عنوان نمونه در مسیر https://7learn.com/blog/laravel/laravel-routes پارامتر اول -هرچه که باشد- در نقش category و پارامتر دوم slug است.

فریمورک لاراول امکانی را فراهم می کند که با استفاده از آن می توانید ارسال پارامتر را به یک URL، اختیاری کنید (Optional Parameter). کافی است یک علامت ? در کنار نام پارامتر بنویسید. البته فراموش نکنید در تابع اکشن حتما برای پارامترهای اختیاری مقدار پیشفرض در نظر بگیرید. در مثال زیر پارامتر slug را به صورت اختیاری در نظر گرفته ایم:

گروه بندی روت های لاراول

به جای آن که یک سری ویژگی ها یا attribute های یکسان را بارها به صورت تکراری به تعدادی از روت ها نسبت دهیم می توانیم از قابلیت روت های گروه بندی شده (Route Groups) در لاراول استفاده کنیم. روت های گروهی به شما امکان می دهند که به جای تکرار این اتریبیوت ها آن ها را به یک گروه از روت ها نسبت دهید. اتریبیوت های مشترک در فرمت یک آرایه به شکل پارامتری به اول متد Route::group داده می شوند. در ادامه این بخش بعضی از اتریبیوت های قابل اشتراک در روت های گروهی را به شما معرفی می کنیم.

اشتراک درMiddleware

برای نسبت دادن یک Middleware به گروهی از روت ها از متد middleware قبل از تعریف گروه استفاده می کنیم. این Middleware ها به ترتیبی که در آرایه نوشته شده اند روی روت ها اعمال می شوند. به مثال زیر توجه کنید:

اشتراک در فضای نام

یکی دیگر از موارد کاربرد مهم روت های گروهی نسبت دادن یک فضای نام (Namespace) PHP به گروهی از کنترلرها است. برای انجام این کار از متد namespace به این صورت استفاده می کنیم:

البته لاراول به طور پیشفرض تمام کنترلرهای روت ها را در فضای نام App\Http\Controllers فرض می کند. به همین دلیل احتیاج نیست در متد namespace نام کامل فضای نام که در این مثال یعنی App\Http\Controllers\Admin، را وارد کنید. یعنی بخش App\Http\Controllers حذف می شود و کافی است Admin را وارد کنید.

اشتراک در زیردامنه

گروه های روت می توانند برای استفاده اشتراکی زیر دامنه (Sub-domain) هم استفاده شوند. این زیردامنه ها به شما اجازه می دهند بخشی از دامنه را برای استفاده در روت خود شخصی سازی کنید. برای مشخص کردن زیر دامنه می توانید از متد domain قبل از ایجاد گروه به این صورت استفاده کنید:

اشتراک در Prefix

با استفاده از متد prefix می توانید بخشی از URL را به عنوان پیشوند به همه روت های گروه نسبت دهید. به این ترتیب دیگر احتیاجی به تکرار آن تکه از URL در همه روت ها نیست. به عنوان مثال در کد زیر تمام روت های زیرگروه articles را با پیشوند articles در یک گروه قرار داده ایم:

استفاده از عبارات منظم در روت ها

در مثال های بالا یک پارامتر id برای مقالات در نظر گرفتیم. در حالت عادی این id با id رکوردهای جدول مقالات مقایسه شده و مقاله ای که شماره id آن با شماره پارامتر برابر بود در صفحه نمایش داده می شود. اما چه اتفاقی می افتد اگر کاربر به اشتباه مقدار این پارامتر را به حروف وارد کند؟ همانطور که می بینید باید دنبال راهی باشیم که بتوانیم فقط پارامترهای با فرمت مناسب را بپذیریم. این کار در لاراول با استفاده از متد where و عبارات منظم (Regular Expressions) روی روت امکان پذیر است. به این صورت که نام پارامتر را به عنوان آرگومان اول و عبارت منظم مورد نظرمان را به عنوان آرگومان دوم به متد where می دهیم. به مثال زیر توجه کنید:

در کد بالا یک عبارت منظم را برای پارامتر id تعریف کرده ایم. از این به بعد هر وقت کاربری سعی کند یک مقدار غیر عددی را به عنوان پارامتر id به همراه URL ارسال کند یک خطای NotFoundException به او نمایش داده خواهد شد.

جمع بندی

فریمورک لاراول دارای یک سیستم پیشرفته روتینگ یا مسیریابی است که امکانات زیادی را برای کار با URL ها در اختیارتان قرار می دهد. می توانید روت ها را گروه بندی کنید، به آن ها پارامتر بچسبانید و یا با استفاده از عبارات منظم آن ها را فیلتر کنید. در این مطلب به آموزش استفاده از بعضی امکانات پرکاربرد روتر لاراول پرداختیم. اگر سوالی در این مورد دارید از پاسخ دادن به سوالات شما خوشحال می شویم!

اگر می خواهید بیشتر در مورد لاراول مطالعه کنید مقالات زیر را دنبال کنید

 

لاراول کاربردی
اگر دوست داری PHP و لاراول رو حرفه ای یاد بگیری زبان php تقریبا بیش از 82% بازار وب ایران رو در اختیار داره و اگر همت کنید و بتونید در این زمینه متخصص بشید، فرصت های کاری زیادی رو پیش رو خواهید داشت. دوره متخصص لاراول سون لرن همه این مهارت ها رو به شما آموزش میده : لاراول کاربردی arrow_back
7Learn Experts
comment دیدگاه کاربران

add_circle ارسال دیدگاه

خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :