لاراول اغلب اوقات مجموعه مفید و کاربردی از دایرکتیوهای که ما میتوانیم داخل قالب خود استفاده کنیم ارائه می دهد، گاهی اوقات شرایطی پیش می آید که باعث میشود ما یک کد را در چندین موقعیت مختلف تکرار کنیم در این صورت لاراول این امکان را برای ما قرار داده است که کدهای یکسان و تکراری را به صورت دایرکتیو بنویسیم در واقع دایرکتیوها در 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() می تواند یک مسئله بزرگ برای کدنویسی نباشد و برای اکثر پروژهها همین دایرکتیوهای پیشفرض کار ما را راه می اندازد اما استفاده از همین ترفند های کوچک به مرتب و تمیزتر بودن کد نویسی شما کمک فراوانی میکند همچنین برای پروژههای بزرگ باید به سراغ دایرکتیوهای پیچیده و سفارشی برویم.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید