آموزش توابع و دستورات Route در لاراول

0
90

Routing به زبان ساده

اساسی ترین نیاز لاراول تعریف کردن url است که از طریق Route ها تعریف می شود . یک روش بسیار ساده که مسیر ها سایت شما را مشخص می کند :

فایل های اصلی Route چه هستند ؟

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

فایل routes/web.php تمام مسیر های که در سایت شما قرار دارند را پیکربندی می کند .

تمام Route ها در web.php گروه middleware متصل هستند که باعث می شوند قابلیت های محبوبی مانند session و CSRF protection به آن ها اضافه بشود .

برای دوستانی که نیاز به دسترسی به api لاراول دارند نیز فایل : routes/api.php در دسترس است که اون هم به گروه middleware متصل و از تمام  قابلیت های آن بهره مند می شود .

برای اکثر برنامه های پروژه های خود ، شما برای تعریف url مسیرهای خود در ابتدا تنها نیاز به دسترسی فایل : routes/web.php  دارید و سپس به راحتی از طریق مرورگر و url دسترسی داشته باشید .

به عنوان مثال، شما برای اینکه بتوانید به مسیر http://your-app.test/user دسترسی پیدا کنید روت اصلی را اینگونه تعریف می کنیم  :

تمام روت های تعریف شده در فایل routes/api.php توسط سرویس RouteServiceProvider مسیر دهی می شود . داخل این گروه  اگر در آخر آدرس /api اضافه کنیم به صورت خودکار اعمال می شود ونیاز نیست به صورت دستی هر روت را وارد کنید .تمام عملیات پیشوند ها و اعمال تغیرات در RouteServiceProvider انجام می شود .

متد های Router موجود

روتر به شما اجازه می دهد تا مسیرهایی را که به هر فعل HTTP پاسخ می دهند، ثبت کنید:


گاهی اوقات ممکن است لازم باشد مسیری را ثبت کنید که به افعال چندگانه HTTP ٬ پاسخ دهد. برای اینکار شما باید از متد match استفاده کنید . یا اینکه شما route را تعریف کنید که بخواهد به تمام درخواست که از سمت فعل های http ارسال می شود پاسخ بدهید  برای اینکار از متد any استفاده کنید :

CSRF Protection – محافظت از طریق CSRF

اشاره به HTML فرم ها که اشاره دارد که POST, PUT, یا  DELETE روت های که در web routes تعریف شده است برای اینکار فایل باید دارای CSRF token field باشد .

در غیر این صورت، درخواست رد خواهد شد. شما می توانید درمورد حفاظت CSRF در اسناد CSRF اطلاعات بیشتری کسب کنید:

تغیر مسیر روت (Redirect)‌ Route

اگر شما می خواهید URI را به مسیر دیگری هدایت کنید ، می توانید از تابع Route::redirect استفاده کنید .

این روش یک میانبر مناسب را فراهم می کند به طوری که شما لازم نیست یک مسیر کامل یا کنترل را برای انجام یک تغییر مسیر ساده تعریف کنید .

نمایش Route ها

اگر قصد دارید یک view در route نمایش دهید می توانید از متد Route::view استفاده کنید .

مانند روش تغییر مسیر، این روش یک میانبر ساده را فراهم می کند به طوری که شما نباید یک مسیر کامل یا کنترل را تعریف کنید. تا بتوانید یک متن ساده را نمایش دهید .

در این متد url را به عنوان اولین آرگومان و نام نمایش به عنوان آرگومان دوم آن قرار می دهیم . علاوه بر این شما می توانید آرایه ای از داده ها را برای نمایش به عنوان یک استدلال اختیاری سوم منتقل کنید:

پارامتر های Route ها (تعیین پارامتر)

 

پارامتر های اجباری Route های لاراول

البته، گاهی اوقات شما نیاز به گرفتن بخش هایی از URI در route خود دارید. برای مثال، شما ممکن است نیاز به ذخیره یک ID کاربر از URL داشته باشید. شما می توانید با تعیین پارامترهای route این کار را انجام دهید:

شما می توانید پارامتر های اضافی برای Route های خود را در صورت نیاز تعریف کنید و در صورت نیاز از آن های استفاده کنید .

پارامتر های route ها همیشه در {} براکد قرار می گیرد و باید از حروق الفبای انگلسیی تشکیل شود و از کاراکتر خط وسط – استفاده نشود . به جای استفاده از کاراکتر – می توانید از خط پایین _ استفاده کنید .

پارامتر های اختیاری Route های لاراول

گاهی شما نیاز دارید که پارامتر هایی برای Route خود در نظر بگیرید ٬ اما شاید گاهی اوقات نیازی به این پارامتر نباشد. برای ایجاد اینگونه پارامتر هایی در route ها باید کاراکتر ? بعد از متغیر قرار دهید . اطمینان هم حاصل کنید که متغیر مورد نظر یک مقدار پیشفرض دارد .

محدود کردن فرمت کاراکتر ها در متد های Route

شما به راحتی می توانید تمام پارامتر هایی که در route خود تعریف کرده را محدود کنید ٬ برای اینکار باید از تابع where در route های خود استفاده کنید .

محدودیت های سراسری و کلی در متد های Route

اگر شما نیاز دارید که route را برای همیشه با یک اصطلاح خاص محدود کنید باید از متد pattern استفاده کنید . شما تابع pattern را باید در متد boot در RouteServiceProvider :

هنگامی که الگوی تعریف شود ، به طور خودکار به تمام مسیرها با استفاده از نام پارامتر هستند اعمال می شوند :

متد نامگذاری route ها – Named Routes

نامگذاری route اجازه می دهد که URL مناسب و راحت تری تولید می شود . شما می توانید یک متد name را برای یک مسیر با پیوند زدن نام route بر روی تابع route مشخص کنید:

شما همچنین می توانید نام route را برای اقدامات کنترل کننده مشخص کنید:

تولید URL  با استفاده از متد Named Routes

زمانی که شما یک روت را با استفاده از متد name نامگزاری می کنید به راحتی می توانید از طریق همین متد url ها را نیز تولید کنید .

اگر شما از متد named route  استفاده کنید همچنین دسترسی خواهید داشت که یک آرگومان دوم هم تعریف کنید و آن را به route پاس دهید و به صورت خودکار می توانید به url هم پاس دهید  .

پیدا کردن یک روت خاص در الگوریتم

اگر کی خواهید ببینید درخواست فعلی (request) از سمت چه route هست تا بتوانید یکسری عملیات خاص را روی آن انجام دهید می توانید از روش زیر نام روت (همان متد named برای route) را ب راحتی پیدا کنید :

تعریف یک یا چند خاصیت برای یک دسته از route ها – Route Groups

Route Groups به شما اجازه می دهند ویژگی های route ،  را در تعداد زیادی ازroute ها بدون نیاز به تعریف آن ویژگی ها در هر route تنها به انجام دهید . ویژگی های مشخص شده در قالب آرایه به عنوان اولین پارامتر به روشRoute::group مشخص می شود.

قابلیت Namespaces برای route در لاراول

تعریف کلی Namespaces در PHP

  1.  جلوگیری از name collision ( جلوگیری از نامگذاری مشابه برای توابع یا کلاسها یی که ایجاد کرده اید با کلاسها و توابع داخلی php)
  2. کوتاه کردن نامهای طولانی که برای کلاسها ایجاد کرده اید برای خوانایی بهتر کد.

استفاده از Namespaces در route ها :

به یاد داشته باشید به صورت پیشفرض RouteServiceProvider تمام route های شما را داخل گروه Namespaces قرار می دهد . تنها جایی که شما نیاز به استفاد از این تابع دارید در App\Http\Controllers هست .

 

Sub-Domain در Route ها

گروه های route نیز ممکن است برای مدیریت مسیر از زیر یا ساب دامین  استفاده کنند . ساب دامین ها ممکن است پارامترهای route را همانند route های URI ها اختصاص داده و به شما اجازه می دهد بخش هایی از ساب دامین را برای استفاده در route یا کنترل خود ترسیم کنید ٬ برای استفاده از این قابلیت باید از متد domain استفاده کنید :

پیشوندهای Route

شما با استفاده ار متد prefix می توانید برای روت های خود پیشوند اضافه کنید و به راحتی به آن دسترسی داشته باشید . برای مثال یک گروه دامنه را به پیشوند admin اتصال می دهیم .

استفاده از پیشوند های Route به عنوان آرایه

متد  name ممکن است برای پیشوند هر نام route در گروه با یک رشته داده شده استفاده شود. برای مثال، ممکن است بخواهید تمام نامهای route گروهی را با admin پیشوند کنید. رشته داده شده به عنوان نام مسیر دقیقا همانطور که مشخص شده است، پیشرو است، بنابراین ما مطمئن هستیم که . در  قبل پیشوند همه چی را فراغم می کند :

مدل های الزام آور Route

هنگام تزریق یک ID مدل به یک مسیر یا عملیات کنترل، شما اغلب درخواست برای بازیابی مدل که مربوط به آن ID است. اتصال مدل route Laravel یک راه مناسب برای به طور خودکار تزریق نمونه به طور مستقیم در route های خود را تزریق می کند. به عنوان مثال، به جای تزریق یک شناسه کاربر، می توانید کل نمونه مدل کاربر که با شناسه داده شده مطابقت دارد، تزریق کنید.

مستند های الزام آور – Implicit Binding

Laravel به طور خودکار مدلهای Eloquent تعریف شده در routes یا اقدامات controller که نامهای متغیری که با نوع نامشخص مطابقت دارند با نام یک قسمت مسیر مسیریابی می شوند. مثلا:

از آنجایی که متغیر $user به عنوان مدل App/User از Eloquent است و نام متغیر با بخش {user}     URI همراه است، Laravel به طور خودکار نمونه مدل را که دارای شناسه مربوط به مقدار مربوطه از URI درخواست است تزریق می کند. اگر یک مثال نمونه مطابق در پایگاه داده یافت نشد، پاسخ 404 HTTP به طور خودکار تولید خواهد شد.

سفارشی سازی نام key

اگر میخواهید الگوی اتصال برای استفاده از یک ستون پایگاه داده به جای id هنگام بازیابی کلاس مدل داده شده  باشد ٬ شما ممکن است متد getRouteKeyName از Eloquent model نادیده بگیرید .

Explicit Binding

برای ثبت explicit binding ، از روش model route برای مشخص کردن کلاس برای یک پارامتر داده استفاده کنید. شما بایستی explicit binding خود را در روش boot از کلاس RouteServiceProvider تعریف کنید:

از آنجا که ما همه پارامتر های {user} را در محدود کرده ایم در مدل App\User ٬ یک نمونه User را به route اضافه می کنیم . بنابراین، برای مثال، درخواست به profile/1 برای تزریق user به route از دیتابیس از ID 1

اگر یک مثال نمونه مطابق در پایگاه داده یافت نشد، پاسخ 404 HTTP به طور خودکار تولید خواهد شد.

سفارشی سازی Resolution Logic

اگر شما می خواهید از resolution logic استفاده کنید باید از متد Route::bind استفاده کنید .

برای پاس دادن Closure به متد bind مقدار قطعه URI را دریافت  کند و باید نمونه کلاس را که باید به Route تزریق شود، بازگردانیم:

محدودیت Rate

middleware ها برای محدودیت در Rate  دسترسی به روت ها در لاراول گنجانده شده است .

برای شروع تابع throttle middleware را به  route یا group of route اختصاص دهید .

middleware throttle دو پارامتر را تعیین می کند که حداکثر تعداد request  را می توان در یک تعداد معینی داده شده تعیین کرد. به عنوان مثال، اجازه دهید مشخص کنیم که یک کاربر تأیید شده میتواند به گروه زیر از مسیرها 60 بار در دقیقه دسترسی داشته باشد:

محدودیت Rate داینامیک (پویا)

شما می توانید یک request داینامیک حداکثر بر اساس ویژگی یک User model تایید شده مشخص کنید. برای مثال اگر User model شما حاوی یکattribute یا همان صفت rate_limit شما باید صفت را به throttle middleware پاس بدهید ٬ به طوری که برای محاسبه حداکثر تعداد درخواست مورد استفاده قرار می گیرد:

متد های کار راه انداز (مستعار) در route

forms های HTML از اکشن های PUT, PATCH و DELETE پشتیبانی نمی کنند . بنابراین برای صدا زدن این سه تابع در route  از فرم های HTML باید فیلد مخفی _method در فرم استفاده کنیم .

value از طریق فیلد _method و از طریق متد HTTP request ارسال می شود :

ممکن است البته شما بخواهید که از دستور العمل @method در سیستم route برای ساخت فیلد _method استفاده کنید :

دسترسی به مسیر فعلی در لاراول در سیستم route

شما می توانید از متد های current, currentRouteName, و currentRouteAction برای دسترسی به Route facade برای دسترسی به اطلاعات handling در route ها استفاده کنید :

 

دیدگاه بگذارید

اولین دیدگاه را شما بگذارید !

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  مشترک شوید  
اطلاع از