آموزش ایجاد دایرکتیو @route

گردآوری و تالیف : رضا جمال زاده
تاریخ انتشار : 14 شهریور 1398
دسته بندی ها : لاراول

لاراول اغلب اوقات مجموعه مفید و کاربردی از دایرکتیو‌های که ما می‌توانیم داخل قالب خود استفاده کنیم ارائه می دهد، گاهی اوقات شرایطی پیش می آید که باعث می‌شود ما یک کد را در چندین موقعیت مختلف تکرار کنیم در این صورت لاراول این امکان را برای ما قرار داده‌ است که کدهای یکسان و تکراری را به صورت دایرکتیو بنویسیم در واقع دایرکتیو‌ها در blade توابعی هستند که کدهای پیچیده را پنهان می‌کنند.

Helper  فانکشن‌ها در دایرکتیو

لاراول اغلب اوقات helper فانکشن ها را به صورت دایرکتیو به منظور کمک به برنامه‌نویسان برای تمیز‌تر نوشتن کد‌ها در ساختار html ، wrap می‌کند. مثالی از دیرکتیو های کاربردی در لاراول می‌توان به @csrf ، @if،@method  و @dump اشاره کرد.

در پشت پرده ما می‌توانیم مشاهده کنیم که دایرکتیو‌ها چیزی بیشتر از توابع کمکی نیستند و ما می‌توانیم با کمک این توابع دایرکتیو‌های مختلفی را تعریف کنیم و آن‌ها را در جاهای مختلف قالب خود استفاده کنیم شما می‌توانید دایرکتیو‌های مختلف را در آدرس زیر مشاهده کنیم:

Illuminate\View\Compilers\Concerns\CompilesHelpers

تعریف یک دایرکتیو

به عنوان مثال شاید نوشتن تابع route یکی از پرکاربردترین کارها در قالب ما باشد مانند زیر:

<a href="{{ route('posts.show', $post) }}">View</a>

البته در مثال بالا یک مشکل بزرگ به نظر نمی‌رسد که باعث کثیفی و نامرتب شدن قالب‌مان بشود اما وقتی ما می‌توانیم به سادگی این قطعه کد را کوتاه بنویسیم چرا این کار را نکنیم؟

بنابراین برای کوتاه شدن کد باید یک دایرکتیو @route را در services provider  تعریف کنید در صورتی که شما موارد زیادی مرتبط با blade در provide خود دارید، در این صورت می‌توانید یک provider جدا برای blade به اسم BladeServiceProvider تعریف کنید در غیر این صورت می توانید از AppServiceProvider به صورت پیش‌فرض استفاده کنید.

use Illuminate\Support\Facades\Blade;

/**
 * Bootstrap services.
 *
 * @return void
 */
public function boot()
{
    Blade::directive('route', function ($arguments) {
        return "<?php echo route({$arguments}); ?>";
    });
}

در مثال بالا ما فقط یک arguments$ به عنوان پارامتر تابع قرار دادیم مهم نیست که چه تعداد پارامتر را در دایرکتیو قرار دهیم این پارامتر‌ها به یک عبارت تبدیل می‌شوند و به عنوان داده‌ی ورودی route قرار می‌گیرند، به عبارت دیگر در قالب blade این دایرکتیو‌ها مانند تابع اصلی عمل می‌کنند و همانطور پارامتر ورودی دریافت می‌کنند با این تفاوت که بخشی از کد را در providers تعریف کرده‌ایم. 

مانند مثال زیر ما می‌توانیم به سادگی از دایرکتیو‌ی که تعریف کرده‌ایم استفاده کنیم:

<a href="@route('posts.show', $post)">View</a>

استفاده از دایرکتیو @route  به جای نوشتن route()  می تواند یک مسئله بزرگ برای کدنویسی نباشد و برای اکثر پروژه‌ها همین دایرکتیو‌های پیشفرض کار ما را راه می اندازد اما استفاده از همین ترفند های کوچک به مرتب و تمیز‌تر بودن کد نویسی شما کمک فراوانی می‌کند همچنین برای پروژه‌های بزرگ باید به سراغ دایرکتیو‌های پیچیده و سفارشی برویم.

منبع

مقالات پیشنهادی

  • آموزش آنگولار جی اس برای طراحان

    یک شروع خوب! همان طور که سازنده ی آنگولار: میسکو هوری در مصاحبات مختلفش گفته است: "هدف آنگولار جی اس توانمند کردن طراحان وب (ونه برنامه نویسان)برا...

    محمد شریفی