در مقاله قبل به توضیح و بررسی کامل روتها در لاراول پرداختیم و به طور مختصر در مورد ویژگیهای مختلف این عنصر لاراول توضیح دادیم. در این مقاله قصد داریم که به بررسی چگونگی ایجاد محدودیتها توسط عبارات منظم به (اختصار RegEx) بر روی روتهای لاراول بپردازیم. این ویژگی یکی از ویژگیهای خیلی خوب در روتهای لاراول است، اما ممکن است هنوز برای برخی لاراول کارهای تازهکار ناشناخته باشد و همچنین در بعضی موارد ممکن است نیاز باشد برای یافتن الگوی مناسبی از عبارات منظم که برای ایجاد محدودیت بر روی پارامترهای روتها استفاده میشوند، تحقیق و بررسی بیشتری صورت گیرد.
اول از همه بیایید ببینیم که چطور باید از الگوها برای ایجاد قوانین مشخص بر روی روتها استفاده کنیم. در فایلهای مربوط به روت-web.php و api.php- ، در جایی که شما روتهای خود را تعریف میکنید، شما میتوانید گزینههای دیگری را نیز اضافه کنیم مانند الگوهایی که میخواهید از آنها استفاده کنید:
Route::get('user/{user}', 'UsersController@show')->where('user', '[a-z]+');
همچنین میتوانید یک آرایه از پارامترها در روت خود قرار دهید، در صورتی که چند پارامتر داشته باشید:
Route::get('user/{user}/{account}', 'UsersController@account')->where([
'user' => '[a-z]+',
'account' => '[0-9]+',
]);
برای آشنایی بیشتر در مورد روتها در لاراول میتوانید از مقاله راهنمایی روتها در لاراول و همچنین از مستندات لاراول استفاده کنید، اما در ادامه ما به بررسی برخی نمونهها از ایجاد محدودیتهای مفید بر روی روتهای لاراول میپردازیم.
فقط کلمات کلیدی خاص مجاز باشند
گاهی اوقات ممکن است ما بخواهیم فقط برخی از کلیدواژههای خاص را قرار دهیم و همچنین هر چیزی به غیر از این کلمات خاص قرار گیرد توسط عبارات منظم پذیرفته نشود. ما میتواند به سادگی یک مجموعه ایجاد کنیم و آن را با پارامترهای داده شده مطابقت دهیم.
Router::get('pages/{page}', ...)->where('page', 'about|contact');
مطابقت دادن هر چیزی به جز برخی کلیدواژههای خاص
در برخی موارد ممکن است شما نخواهید که برخی کلمات خاص به عنوان پارامتر در روت شما قرار گیرند. برای این کار دو روش وجود دارد، روش اول بدون عبارات منظم، ما باید روتها را به صورت جداگانه تعریف کنیم و آنها را قبل از روت داینامیک خود قرار دهیم. در روش دیگر، با استفاده از عبارات منظم ما میتوانیم به روت خود بگوییم که هر چیزی را به جز کلیدواژههای خاصی که نوشتهایم را عبور دهد.
// Without regex
Router::get('pages/about', ...);
Router::get('pages/contact', ...);
Router::get('pages/{page}', ...);
// With regex
Router::get('pages/{page}', ...)->where('page', '^(?!about|contact)$');
ما این توانایی را داریم که بعداً همانطور که میخواهیم خطاهای ایجاد شده را مدیریت کنیم. در صورتی که کلمات کلیدی داده شده در پارامتر {page} باشند، هیچ کنترلری اجرا نمیشود.
مدیریت همه چیز به عنوان یک پارامتر
لاراول روشی را ارائه داده است که در آن شما میتوانید دو یا چند پارامتر را به عنوان یک پارامتر در روت خود استفاده کنید، برای مثال در روت blog ما میخواهیم دو پارامتر categories و laravel را به عنوان یک پارامتر قرار دهیم، برای این کار میتوانیم مطابق زیر عمل کنیم:
Route::get('blog/{slug?}', 'BlogController')->where('slug', '(.*)');
با این کار هر آنچه بعد از کلمه blog میآید، لاراول آن را به عنوان یک رشته مدیریت میکند و پس از آن میتوانیم آن را در کنترلر خود به صورتی که میخواهیم استفاده کنیم. توجه کنید که پارامتر slug در اینجا با قرار دادن علامت ? به صورت پارامتر اختیاری درآمده است.
استفاده از یک الگوی خاص
در ادامهی مقاله، باید بگوییم گاهی اوقات ما نیاز داریم که از الگوهای خاص در روتهای خود استفاده کنیم. برای مثال ۴ عدد، ۴ حرف و ۴ عدد جدا شده با یک علامت دش مانند:
Route::get('transaction/{id}', ...)->where('id', '^([0-9]{4}-[a-z]{4}-[0-9]{4})$');
در مثال بالا اگر ما Id دریافت کنیم که با الگو مطابقت نداشته باشد برای مثال علامت دش نداشته باشد یا ۵ عدد داشته باشد و... در این صورت با روت نوشته شده مطابقت نخواهد داشت و اجرا نخواهد شد.
نتیجهگیری
همان طور که دیدید در لاراول تقریباً بینهایت راه برای ایجاد قوانین روی روتها وجود دارد. ما میتوانیم آنها را به صورت گلوبال یا لوکال کنیم و یا میتوانیم چندین و یا فقط یک محدودیت بر روی روتهای خود قرار دهیم. نکتهای که در اینجا وجود دارد این است که شما فقط به یک دانش اندک از عبارات منظم نیاز داریم و سپس با آن میتوانید هر الگویی را که میخواهید بر روتهای خود اعمال کنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید