در نوشته های پیشین در مورد مفهوم و چگونگی نوشتن مسیرها (Route) در لاراول صحبت کردیم. به طور مثال فرض کنید سایتی به آدرس http://www.example.com دارید که به عنوان مسیر ریشه سایت است و یک سری از اطلاعات را نمایش می دهید. سایت دارای صفحه ای به نام category است که در آن تمامی تصاویر آپلود شده نشان داده می شود ولی سایت به گونه ای طراحی شده است که می تواند نام یک دسته بندی را دریافت کند و سپس تمامی تصویرهای همان دسته را نشان دهد.

بنابراین احتمالا شما مسیری را به صورت category/{category_name} می نویسید، زیرا می خواهید زمانی که مسیر http://example.com/category را در مروگر اجرا کردید تمامی تصاویر نشان داده شود و زمانی که مثلا http://example.com/category/cat را نوشتید، صفحه ای باز شود که تنها تمامی تصاویر گربه ها را نشان دهد. قطعه کد زیر مسیر مربوط به آن را نشان می دهد.

در کد بالا و توسط متد ()get از کلاس Route مسیری را تعریف کردیم که نام یک دسته بندی را دریافت و سپس پارامتر یا مقدار دریافت شده را به تابع بی نام ارسال می کند و در نهایت مقدار دریافت شده را به یک فایل نما به نام image_gallery.blade.php ارسال می کند. درون فایل نما مقدار ارسال شده را میان جفت آکولادهای باز و بسته شده قرار داده ایم.

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

حال اگر به طور مثال مسیر http://127.0.0.1:8000/category/cat را درخواست کنیم، باید شکلی همانند زیر نشان داده شود.

همانطور که گفتیم اگر مسیر http://127.0.0.1:8000/category را وارد کنیم باید تمامی تصویرها را نشان دهد ولی مطابق شکل زیر اگر مسیر را درخواست کنید صفحه خطای نشان داده می شود که دلیل آن عدم توانایی پاسخ گویی وب سایت به درخواست شما است.

خطای شکل زیر به دلیل عدم پیدا شدن صفحه یا به عبارت دیگر خطای Not Found – 404 است. به عبارت دیگر مسیری را وارد کرده اید که لاراول نتوانسته است درون فایل web.php یک مسیر متناسب با آن را پیدا کند و در نهایت یک فایل نما را به شما نشان دهد. به عبارت دیگر مسیر نوشته در کد بالا شما را مستلزم کرده است که حتما یک نام دسته بندی تصویر را وارد کنید.

ایجاد Route با پارامترهای اخیتاری

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

۱ – انتهای نام پارامتر باید علامت سوال قرار دهید.

۲ – درون تابع بی نام باید برای پارامتر ورودی مقدار null یا یک مقدار پیش فرض برای پارامتر در نظر بگیرید.

در قطعه کد زیر می بینید که پارامتر همچنان میان آکولادهای  باز و بسته قرار گرفته است ولی انتهای نام پارامتر علامت سوال ? قرار داده ایم و همچنین در تابع بی نام مقدار null را برای پارامتر در نظر گرقته ایم.

بنابراین در خط سوم چک شده است که آیا مقدار پارامتر category$ در تابع بی نام برابر با null است یا نه؟ اگر null باشد شرط درون if اجرا می شود و در غیر این صورت شرط درون else اجرا می شود به این معنی که مقداری به تابع بی نام ارسال شده است. همچنین مطابق کد زیر می بینید که به جای مقدار null یک مقدار پیشفرض را به عنوان مقدار پارامتر تابع تعریف کرده ایم.

بنابراین با توجه به مطلب قبلی و همین مطلب، در لاراول می توانیم دو دسته پارامترهای اجباری و اختیاری را ایجاد کنیم. تفاوت این دو پارامتر در این است که در انتهای تعریف پارامتر اختیاری یک علامت سوال ? قرار می گیرد. حال فرض کنید که پارامتر را اختیاری تعریف کرده اید ولی در تابع بی نام برای پارامتر نه مقدار null تعیین کرده اید و نه مقدار پیش فرض، پس زمانی که مسیر را درخواست می کنید باید خطای زیر را ببینید.

دانلود کد Laravel Route Parameter