یاکوب بنت (Jacob Bennett) توی جامعه لاراول تقریبا شناخته شدهست مخصوصا بخاطر پادکست لاراول نیوز. مدتی پیش یه نظرسنجی توی توییتر گذاشته بود که وقتی توی ویوی لاراول کاربر رو به یه لینک ارجاع میدید از چه روش و هلپری استفاده میکنید؟
من خودم به شخصه برای ایجاد لینک در لاراول از route() استفاده میکنم و گاهی هم از URL String استفاده کردم. پانصد نفر به این نظرسنجی پاسخ دادند و خب جواب نظرسنجی هم واضحه که پاسخدهندهها با اختلاف از route() استفاده میکنند. ولی خب برای آدم این سوال پیش میاد که چه روشهایی برای این کار هست؟ نکنه روشهای بیشتری باشه و یا روشهای دیگه بهتر باشند؟ در ادامه روشهایی که برای این کار وجود داره و مزایا و معایب هر کدوم رو یه مروری میکنیم.
Laravel Route Helper
route('user.profile', ['id' => 1])
مزایا: این روش با استفاده از نامی که برای هر route مشخص شده کار میکنه و حسنش اینه که به نام کنترلر و متد اون وابسته نیست و در صورتی که هر کدوم از اونها رو تغییر بدید مشکلی توی لینک تولیدی ایجاد نمیشه.
معایب: شما مجبور میشید همه یا دست کم بیشتر روتهایی که مینویسید رو نامگذاری کنید.
Laravel Action Helper
action('UserController@profile', ['id' => 1])
مزایا: این روش با استفاده از نام کنترلر و متد اون کار میکنه که باعث میشه برای نامگذاری روتها وقت نذارید!
معایب: بزرگترین مشکل این روش اینه که فرض کنید شما به هر دلیلی تصمیم میگیرید که نام کنترلر یا متد اون رو عوض کنید و اون وقت با کلی لینک مواجه میشید که خرابه!
Laravel URL Helper
url('user/profile', [1])
مزایا: این روش هم مثل روشهای بالا دامین هاستی که توی تنظیمات قرار دادید رو به صورت خودکار به لینک اضافه میکنه فقط حسن اصلیش اینه که راحتتره و شما رو درگیر نامگذاری روتها یا اینکه ریکوئست به کدوم کنترلر بره نمیکنه بلکه خود url داره بهش داده میشه.
معایب: اگه روتهای که توی فایل route.php یا web.php نوشتید رو تغییر بدید باید هر جایی که از این هلپر استفاده کردید رو تغییر بدید.
URL Strings
href="/user/profile/{{ $user->id }}"
مزایا: مثل روش قبل خیلی ساده ست. فقط باید بدونی به کجا میخوای لینک بدی و بسیار شبیه به html هست.
معایب: این روش به نام دامینی که توی تنظیمات قرار دادید کاری نداره. لینک تولید ریلیتیو هست و باید حواستون باشه که لینک تولید درست هست یا نه.
نتیجهگیری
من خودم همچنان برای ایجاد لینک در لاراول استفاده از هلپر route() رو ترجیح میدم، طبیعتا شما هم یه روش خاص رو ترجیح میدید ولی چیزی که واضحه اینه که توی پروژههای کوچیک شاید بشه از روشهای سادهتر مثل URL helper یا URL Stirng استفاده کرد ولی اگه قرار باشه پروژه بزرگ باشه فکر میکنم از همون اول بهتره از route() یا action() استفاده کرد.