خانه / برنامه نویسی / آموزش لاراول / آموزش توابع و دستورات Blade در لاراول

آموزش توابع و دستورات Blade در لاراول

آشنایی با Blade لاراول

Blade موتور ساده اما قدرتمند ارائه شده در Laravel

بر خلاف دیگر موتورهای محبوب  PHP برای قالب بندی، سیستم Blade  شما را از استفاده از کدهای ساده  PHP در view ها محدود نمی کند.

برای استفاده از سیستم Blade لاراول ٬باید فایل های پوسته برای  نمایش Blade های خود را اینگونه نام گذاری کنید :

name1.blade.php

معمولا فایل های blade.php  در مسیر resources/views موجود هستند که بسته به سلیقه خود می توانید داخل ریشه های دیگر هم قرار دهید .

ساختن یک نمونه یا پیشنمایش

دو مزیت اصلی استفاده از Blade عبارتند از:  ارث بری و بخش های الگو.
برای شروع، بیایید یک نمونه ساده را بیابیم. اول، ما یک طرح صفحه اصلی را بررسی خواهیم کرد. از آنجایی که اکثر سایت ها و پرتال ها همان طرح عمومی Html جا افتاده را در صفحات مختلف حفظ می کنند،پس ما هم همین طرح را به عنوان یک نمونه برای صفحه Blade خود تعریف می کنیم :

همانطور که می بینید، این فایل حاوی دستورات  HTML معمولی است. با این حال، در کد های بالا به دستور عمل های @section و @yield توجه داشته باشید .

دستورالعمل@section، همانطور که از نامش بر می آید، یک بخش از محتوای را تعریف و مشخص می کند  . در حالی که تابع @yield برای نمایش محتویات یک بخش مشخص استفاده می شود.

 

حالا که ما یک طرح را برای برنامه ما تعریف کردیم، اجازه دهید یک صفحه فرزند (child) را تعیین کنیم که طرح را ارث می برد.

ساخت یک صفحه نمونه blade

هنگام تعریف یک views فرزند (child) ، از دستورالعمل @extends  برای مشخص کردن چیدمان منظوری blade که فرزند (child) باید «ارث بری کند» استفاده کنید. برای تعیین بخش های مختلف  در blade باید از تابع  @section استفاده کرد. به یاد داشته باشید، همان طور که در مثال پایین دیده می شود، محتویات این بخش ها در صفحه با استفاده از @yield نمایش داده می شود :

در این مثال، بخش نوار کناری (sidebar) با استفاده از دستورالعمل @parent برای افزودن (به جای تکرار) محتوا به نوار کناری طرح است. هنگامی که صفحه نمایش داده می شود، دستورالعمل @parent با محتوا جایگزین می شود.

برخلاف مثال قبلی، در این مثال sidebar به جای show@ با endsection@ به پایان می‌رسد. دستور endsection@ فقط یک بخش را تعریف می‌کند در حالی که دستور show@ یک بخش را تعریف کرده و بلافاصله اجرا و نمایش هم می‌کند.

 

views های  Blade ها را می توانید از Route ها با استفاده از تابع های معمولی همان view برگردانید : حواستان باشد که .blade.php دیگر نیاز نیست فقط نام فایل

کامپونت ها و slot ها

قطعات و اسلات مزایای مشابهی را برای بخش ها و طرح های ارائه می دهد؛ با این حال برخی ممکن است مدل ذهنی قطعات و اسلات را آسان تر درک کنند. ابتدا اجازه دهید یک جزء “هشدار” قابل استفاده مجدد داشته باشیم :

متغیر {{ $slot }} حاوی محتوایی است که میخواهیم به مولفه تزریق کنیم. اکنون برای ساختن این مولفه می توان از دستور @component استفاده کرد:

گاهی اوقات مفید است که چندین اسلات را برای یک جزء تعریف کنیم. اجازه دهید ماژول هشدارمان را تغییر دهیم تا به تزریق “عنوان” اجازه دهیم. اسلات های نامگذاری شده ممکن است با «تکرار» متغیری که با نام آن مطابقت دارد نمایش داده شود:

اکنون ما می توانیم محتوا را به اسلات نامگذاری شده با استفاده از دستور @slot تزریق کنیم. هر محتوایی که در دستورالعمل @slot نیست، به جزء در متغیر $slot منتقل می شود:

انتقال داده های اضافی به کامپونت ها

گاهی اوقات شما ممکن است نیاز به ارسال داده های اضافی به یک کامپونت را داشته باشید . به همین دلیل شما می توانید آرایه ای از داده ها را به عنوان آرگومان دوم به دستور @component پاس دهید. تمام داده ها به عنوان متغیر به صورت مولفه در دسترس خواهد بود:

کامپونت های اضافی یا دم دستی

اگر کامپونت های Blade  خود را در یک sub-directory نگهداری کنید، ممکن است بخواهید به آنها دسترسی پیدا کنید. برای مثال، تصور کنید یک کامپونت های Blade که در منابع resources/views/components/alert.blade.php ذخیره می شود. شما می توانید از متد های component به نام مستعار از component.alert در هشدار (alert)استفاده کنید. به طور معمول، این باید در روش بوت(boot) از AppServiceProvider شما انجام شود:

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

شما می توانید پارامترهای کامپونت را حذف کنید اگر هیچ اسلات اضافی وجود ندارد:

نمایش دیتاها

شما می توانید داده های ارسال شده به view های Blade های خود را با قرار دادن متغیر در curly braces نمایش داده شود. به عنوان مثال، با توجه به مسیر زیر:

شما ممکن است محتویات متغیر name را به صورت زیر در Blade خود نمایش دهید:

البته، شما به نمایش محتویات متغیرهای منتقل شده به نمایش محدود نمی شوید. شما همچنین ممکن است نتایج هر تابع پی اچ را تکرار کنید. در حقیقت، شما می توانید هر کد پی اچ پی را که می خواهید درون یک عبارت echo Blade قرار دهید:

عبارت‌های {{ }} Blade، جهت جلوگیری از حملات XSS به صورت خودکار توسط تابع پی اچ پی htmlspecialchars ارسال می‌شوند.

نمایش داده های ناپدید شده

به صورت پیش فرض، ترویج {{ }} اظهارات به صورت خودکار از طریق تابع htmlspecialchars پی اچ پی برای جلوگیری از حملات XSS ارسال می شود. اگر شما نمی خواهید اطلاعاتتان را فرار کنید، ممکن است از نحو زیر استفاده کنید:

هنگام تکیه بر محتوا که توسط کاربران درخواست شما ارائه می شود بسیار مراقب باشید. برای جلوگیری از حملات XSS هنگام نمایش دادههای داده شده توسط کاربر از فرمان فرماندهی دوقطبی استفاده کنید.

رندر کردن JSON ها

گاهی اوقات شما ممکن است یک آرایه را به نظرتان منتقل کنید تا قصد ارائه آن به عنوان JSON را داشته باشید تا یک متغیر جاوا اسکریپت را راه اندازی کنید. مثلا:

با این حال، به جای اینکه به صورت دستی json_encode را فراخوانی کنید، ممکن است از دستور@json خود blade ها استفاده کنید:

کدگذاری Entity HTML

به صورت پیشفرض Blade ها به دو صورت Html خود را رمز نگاری (encode) می کنند .اگر شما تمایل دارید که رمزنگاری دو مرحله ای را غیرفعال کنید باید از AppServiceProvider و از متد boot متد Blade::withoutDoubleEncoding را صدا بزنید :

Blade ها و فریمورک های جاوا اسکریپت

از آنجایی که بسیاری از چارچوب های جاوا اسکریپت نیز از “curly” braces برای نشان دادن یک عبارت داده شده در مرورگر استفاده می کنند، شما ممکن است از نماد @ برای اطلاع دادن به موتور رندر Blade استفاده کنید، بدون تغیر بایستی باقی بماند. مثلا:

در این مثال، نماد @ توسط Blade برداشته می شود؛ با این حال،  {{name}} با موتور Blade دست نخورده باقی خواهد ماند و به جای اینکه توسط چارچوب جاوا اسکریپت شما رندر شود.

 

دستور العمل تابع @verbatim

اگر شما متغیرهای جاوا اسکریپت را در بخش بزرگی از قالب خود نمایش می دهید، می توانید HTML را در دستورالعملverbatim قرار دهید تا نیازی به پیشوند هر  echo Blade و یک علامت @ نیست:

پیکربندی control در blade لاراول

علاوه بر ارقام الگو و نمایش داده ها، Blade همچنین میانبرهای مناسب برای ساختارهای معمول کنترل پی اچ پی مانند اظهارات شرطی و حلقه ها را فراهم می کند. این میانبرها یک شیوه بسیار ساده و کارآمد برای کار با ساختارهای کنترل پی اچ پی را ارائه می دهند، در حالی که با همتایان PHP هم آشنا هستند.

تابع های سراسری IF

برای برای ساختن تابع if به صورت سراسری در لاراول می توانید از توابع

برای تعریف شرط if استفاده کنید .

نمونه :

برای راحتی استفاده از دستورات شرطی در سیستم ، blade نیز دستورالعمل:

به غیر از دستورات شرطی استفاده شده در دستورات بالا می توانید از دو تابع : @isset و @empty نیز استفاده کنید که میانبر های بسیار مفیدی هستند و می توانید به راحتی از آن ها در لاراول استفاده کنید .

دستورات (Authentication) اهراز هویت در سیستم blade

دستورالعمل های@auth و@guest  به سرعت تعیین شود (سرعت بالاتر)که آیا کاربر فعلی تأیید هویت شده است یا مهمان است:

پیکربندی بخش Section (بخش های جداگانه) در سیستم blade

اگر بخشی از محتوا را با استفاده از دستور @hasSection می خواهید چک کنید می توانید از دستور زیر استفاده کنید :

استفاده از توابع Switch در سیستم blade

دستورات سوئیچ می تواند با استفاده از دستورات @switch, @case, @break, @default and @endswitch ساخته شوند:

حلقه ها (Loops) در سیستم blade

علاوه بر اظهارات شرطی، Blade دستورالعمل های ساده ای برای کار با ساختارهای حلقه PHP فراهم می کند. باز هم، هر کدام از این دستورات مشابه با همتایان PHP خود عمل می کنند:

هنگامی که حلقه در حال اجرا می باشد ، شما می توانید از متغیر حلقه برای کسب اطلاعات ارزشمند در مورد حلقه استفاده کنید، مانند اینکه آیا شما در اولین یا آخرین تکرار از حلقه هستید یا نه.

هنگام استفاده از حلقه ها شما همچنین می توانید حلقه را متوقف کنید یا عملیات فعلی را ادامه دهید :

شما همچنین می توانید دستورات شرطی را با توابع ترکیب کنید :

حلقه های متغیر در سیستم blade

وقتی حلقه در حال اجراست ، متغیر $loop درون حلقه شما (ویژه گی های حلقه) در دسترس خواهد بود. این متغیر دسترسی به برخی از بیت های مفید از اطلاعات مانند شاخص حلقه فعلی و اینکه آیا این اولین و آخرین تکرار از طریق حلقه است یا خیر  ٬ برای دسترسی :

اگر شما در یک حلقه تو در تو در حال اجرا بود، می توانید به متغیر حلقه parent loop’s یعنی $loop با استفاده از parent property دسترسی داشته باشید:

دیگر خواص متغیر $loop که می توانید به راحتی به آن دسترسی داشته باشید :

کامنت گزاری در کد ها سیستم Blade

سیستم Blade  همچنین به شما اجازه می دهد تا نظرات خود را در کدهای خود تعریف کنید. با این حال، بر خلاف کامنت HTML، کامنت های Blade در HTML که توسط برنامه شما ارسال می شود شامل نمی شود:

PHP

در برخی موارد، مفید است که کد پی اچ پی را در views های خود بگذاریم. شما می توانید از دستور Bladephp برای اجرای بلوک ساده PHP در قالب خود استفاده کنید:

Include کردن Sub-Views

دستور @include  اجازه می دهد تا شما یک Blade view from را از یک view دیگر اضافه کنید. همه متغیرهایی که در نمایه پدر و مادر در دسترس هستند به نمایه گنجانده شده در دسترس خواهند بود:

در دستور بالا شما تمام ویژه گی ها را به ارث میبرید ولی می توانید به نحوی عمل کنید که فقط چند آرایه را بگیرید و از آن ها استفاده کنید :

تمام سعی خود را بکنید که زمانی از تابع @include استفاده می کنید از view تکرار یاستفاده نکنید که با ارور لاراول مواجه می شوید .

زمانی که می خواهید یک view که می خواهید include کنید  را که ممکن است موجود باشد یا نه و شما نمیدانید تنها کافیست که از تابع @includeIf استفاده کنید :

اگر میخواهید یک آرایه را از یک view ٬ include کنید و شرط شما boolean بودن آرایه هست باید از تابع @includeWhen استفاده بکنید :

 

برای include کردن view مورد نظر که اگر می خواهید در صورت موجود بودن در اولویت صرار بگیرد :

توجه داشته باشید که برای آدرس دهی به هیچ وجه از دو متغیر : __DIR__ و __FILE__ استفاده نکنید چون به مسیر ذخیره اشاره میکنند نه پوشه public

رندر کردن view با مجموعه‌‌ها در Blade

می‌توانید حلقه‌ها و includeها را با دستورالعمل @each در یک خط کد ترکیب کنید:

اولین آرگومان، view partial جهت رندر کردن هر آیتم موجود در آرایه یا مجموعه است. آرگومان دوم، آرایه یا مجموعه‌ای است که می‌خواهید آن را تکرار کنید. سومین آرگومان، نام متغیری است که به گام تکرار فعلی در ویو نسبت داده می‌شود. برای مثال، اگر درون یک آرایه از job ها از حلقه استفاده می‌کنید، ممکن است به هر job به عنوان یک متغیر job در view partial خود دسترسی داشته باشید. کلید گام تکرار فعلی به عنوان متغیر key در ویو در دسترس خواهد بود.
همچنین، می‌توانید چهارمین آرگومان را نیز به دستور @each انتقال دهید. در صورتی که آرایه داده شده خالی بود، این آرگومان مشخص می‌کند که کدام ویو نمایش داده شود:

ویوهای نمایش داده شده از طریق دستور each@ متغیرها را از ویو والد به ارث نمی‌برند. اگر ویو فرزند به این متغیرها نیاز داشته باشد، می‌توانید به جای آن از دستور foreach@ و include@ استفاده کنید.

پشته – گنجاندن تکه کد های اسکریپت در head

‌Blade این امکان را می‌دهد تا پشته‌های نامگذاری شده را push کنید که در جایی دیگر در داخل یک ویو یا layout رندر شود. این موضوع می‌تواند جهت تعیین کتابخانه جاوا اسکریپت موردنیاز ویوهای فرزند مفید باشد.

می‌توانید یک پشته موردنیاز را چندین مرتبه push کنید. برای ارائه کامل محتویات پشته، نام پشته را به دستور @stack انتقال دهید:

تزریق خدمات در blade

دستور @inject برای گرفتن یک سرویس از  سرویس Laravel استفاده می شود. اولین argument نام متغیر سرویس است، در حالی که متغیر دوم نام کلاس یا رابط سرویس مورد نظر شما است.

توسه سیستم blade در لاراول

blade لاراول از طریق directive به شما اجازه می دهد که برای آن بتوانید دستور عمل هایی تعریف کنید که دستورات خود را در آن شخصی سازی کنید . زمانی که کامپایلر با دستورات شما مواجه می شود دستور صدا زده و در نهایت آن را اجرا می کند .

برای یک نمونه ساده : شما تابع @datetime($var) را تعریف می کنید ٬ سپس تابع شما (DateTime) که متغیر $var را داراست به طور مثال می تواند متغیر های زمان را دریافت کند :

همانطور که می بینید، ما متد تابع شما را بر روی هر عبارت ای که در دستورالعمل قرار دارد پشت سرهم قرار می دهیم . بنابراین، در این مثال، PHP نهایی تولید شده توسط این دستورالعمل ٬ این خواهد بود:

پس از به روز رسانی و اضافه کردن یک دستور به blade، شما باید تمام دستورات blade  های کش شده را حذف کنید. view های blade های کش شده  با استفاده از  دستور Artisan یعنی  view:clear حذف می شوند .

سفارشی سازی توابع if سراسری سیستم blade

گاهی استفاده از توابع شرطی بسیار سخت و تکرار آن یا باعث خطا در شرط و یا تکرار بسیار زیاد آن می شود و این مسئله بسیار رنج آور می شود . سیستم blade  برای این مشکل راهی اندیشیده است که با استفاده از دستور Blade::if از تابع شرطی خود استفاده کنید . خب حالا ما برای برای ایحاد یک متد boot درAppServiceProvider دستور زیر را وارد می کنیم :

هنگامی که شرط تعریف شد به راحتی می توانیم از طریق توابع زیر به آن دسترسی داشته باشیم :

 

 

درباره ی شمشاد امیری خراسانی

شمشاد امیری خراسانی
بنیان گذار گروه توسعه وب آریا پاد - توسعه دهنده PHP - لاراول و وردپرس

دیدگاه بگذارید

اولین دیدگاه را شما بگذارید !

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  مشترک شوید  
اطلاع از