Reza Amini
Reza Amini
خواندن ۳ دقیقه·۴ سال پیش

نوشتن ساده تر یک ویو ( Blade ) در لاراول


لاراول هر روز داره اپدیت میده و خودشو به روز نگه میداره ، ولی همچنان هم ی سری ضعف ها توی سیستم ویو هاش وجود داره ، اونم نبود بعضی Directive ها هستش که وجودشون میتونه کار مارو ساده تر کنه .


همیشه از نوشتن کد های تکراری و استفاده از هلپر فانکشن های لاراول مثل route , url , asset و .. توی ویو های پروژه احساس خوبی نداشتم تا اینکه به ذهنم رسید که این هارو اضافه کنم به Engine Blade و خب این کار رو هم انجام دادم ولی خب تیلور جان عزیز موافق این کار نبود و گفت که فعلا نیازی نیس .. :((

بخاطر همین مورد تصمیم گرفتم یه پکیج رو بنویسم که کار رو خیلی راحت تر میکنه برای نوشتن ویو ها توی لاراول .

شما با پکیج EasyBlade دیگه نیاز نیس از ی سری کد های خام PHP وسط کدهاتون استفاده کنید و بعد از نصب این پکیج ی سری Directive باحال در اختیارتون قرار میگیره که میتونید ازش توی پروژه های خودتون استفاده کنید و از شر ی سری کدهای خام PHP وسط ویو خلاص شید.


بیاید با هم ی چنتا از Directive های موجود توی این پکیج رو بررسی کنیم.

اولین مورد دایرکتیو @route هستش :

//Before : {{ route('home') }} //After : @route('home')

که کار هلپر فانکشن route رو برامون انجام میده با این تفاوت که دیگه نیاز نیس هلپر فانکشن رو استفاده کنیم و مستقیما از دایرکتیو استفاده میکنیم.


دومین مورد دایرکتیو @url هستش :

//Before : {{ url('/') }} //After : @url('/')


مورد بعدی @asset عه


//Before : {{ asset('/img/header.png') }} //After : @asset('/img/header.png')


خب تا اینجا چنتا دایرکتیو ساده رو داشتیم ، ی چنتا دیگه داریم که یکم خفن ترن از اینا :)))


یکی از اون دایرکتیو های خفن ، دایرکتیو @isActive هستش، شما با این دایرکتیو میتونید چک کنید که آیا روت فعلی ای که داخلش هستیم برابر هست با روتی که بعنوان پارامتر به این دایرکتیو پاس دادیم ؟

فرض کنید میخوایم اگه روت فعلی برابر با home یا dashboard بود بیاد و استرینگ active رو به کلس های یک المنت html اضافه کنه و اگر نبود استرینگ deactive رو چاپ کنه اونجا (آههه که چقد با این سر و کله میزدم و چقد سر هر پروژه براش کد PHP خام میزدم)

خب بریم مورد بالارو پیاده کنیم با EasyBlade ، نترسید خیلی سخت نیس :

@isActive(['home', 'dashboard'], 'active', 'deactive')

آره فقط همین بود :) ، اگر پارامتر دوم خالی باشه خودکار active چاپ میشه و اگر پارامتر سوم هم خالی باشه و پاس داده نشه نال رو پرینت میکنه.


تا حالا شده که شرط بزارید اگه تعداد این آرایه مساوی یا بیشتر از 1 بود مثلا بیاد ی کاریو انجام بده ؟

خب دیگه ازین به بعد نمیخواد زیاد زحمت بدید به خودتون فقط کافیه از دایرکتیو @count و @endcount استفاده کنید، به این صورت :

@count($users, 1)
// Do Something ...
@endcount // It will compile to : if(count($users) >= 1){ // Do Something ... }

اصلا همه اینا به کنار این @user اش خیلی باحاله ، دیگه ی ساعت با auth سر و کله نزنید اگه ی مقدار از اطلاعات یوزر رو میخواید چاپ کنید

فقط بنویسید :

@user('name')

خودش براتون مینویسه و خلاص ... ، نیاز نیس لاگین بودن کاربرو چک کنید خودش چک میکنه :)

هنوز تموم نشده ، ما برای سشن ها هم ی سری دایرکتیو آماده کردیم:

شما میتونید با @session مقدار یک سشن رو دریافت کنید، مثلا :

@session('foo')

برای مثال کد بالا میاد و چک میکنه که اگر سشن وجود داشته باشه مقدارش رو چاپ میکنه اگرم نه ازش میگذره.


شما با دایرکتیو @sessionExists میتونید وجود یک سشن رو بررسی کنید و در صورت وجودش ی کاریو انجام بدید، مثلا :

@sessionExists('foo') hello @endsessionExists

توی کد بالا اگر سشن foo وجود داشته hello رو چاپ میکنه ، به همین خوشمزگی :)



امیدوارم ازین مقاله و پکیج خوشتون اومده باشه و داخل پروژه هاتون ازش استفاده کنید و به نشانه حمایت توی گیتهاب به ما استار بدید و حتی روش کار کنید تا باهم پیشرفته ترش کنیم :)


راستی اینم آدرس ریپازیتوری گیتهاب پکیج :

https://github.com/rezaamini-ir/laravel-easyblade

اگه دایرکتیو باحالی به ذهنت میاد که پیادش نکردیم بهمون اطلاع بده ، قول میدم اگه شدنی باشه اضافش میکنیم یا اصلا اگه خودتون توانایی و دانششو دارید بسم الله ، Pull request بزنید و مارم خوشحال کنید (البته تست هم یادتون نره براش بنویسیداااا )

لاراولphplaravelبرنامه نویسیblade
سلام ، من رضام برنامه نویس Back-end و علاقه مند به حوزه تکنولوژی :)
شاید از این پست‌ها خوشتان بیاید