29
تشکر

Laravel: آموزش Blade

Laravel 4

Laravel 4

‌فریم ورک Laravel از موتور تپملیت Blade استفاده میکند. در این مطلب میخواهیم با Blade template engine آشنا شویم. در ادامه مطلب همراه ما باشید…

همانطور که در مطلب قبلی به یاد دارید ما فایل‌هایی در View با پسوند blade.php ایجاد کردیم. در‌ واقع با اضافه کردن blade به پسوند فایل، به Laravel میگوییم که این فایل را با موتور تپلیت Blade رندر کند.

در مطلب قبلی برای اینکه محتویات یک متغیر را در HTML نمایش دهیم از کد زیر استفاده کردیم:

<?php echo $user_display_name; ?>

اما در Blade میتوان به صورت زیر عمل کرد که کار همان echo را انجام میدهد:

{{ $user_display_name }}

اما اگر ما به جای نوشتن دو }} از سه }}} استفاده کنیم باعث می‌شود Blade متن خروجی را اسکیپ (escape) کند که بهتر است همیشه از همین روش استفاده کنید.

{{{ $user_display_name }}}

زمانی که میخواهید در خود متن هایتان از }} یا }}} استفاده کنید و نمیخواهید که Blade آن‌ها را رندر نکند کافیست یک @ قبل از آن‌ها قرار دهید.

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

{{{ $name or 'Default' }}}

دستورات

حالا فرض کنید ما یک آرایه مشابه زیر را به View بفرستیم:

Route::get('/', function() {
  $data = array(
    'names' => array('name1', 'name2', 'name3')
  ); 
  return View::make('home', $data);
});

حالا با استفاده از foreach در Blade میتوانیم درون آرایه names گردش کنیم.

@foreach($names as $name)
  اسم: {{ $name }}
  <br />
@endforeach

بقیه دستورات هم مانند if, for و while مشابه زبان PHP است، فقط باید ابتدای هر جمله از این دستورات @ قرار دهید.

Layoutها در Blade

Layoutها در‌ واقع کار همان include را در PHP انجام میدهند. اما کار با آن‌ها راحتتر است. برای مثال ما یک صفحه اصلی داریم که تمام صفحات دیگر ما مشابه همان صفحه اصلی است و فقط قسمت‌هایی از آن‌ها متفاوت است در اینجا باید از Layoutها استفاده کرد.

برای مثال صفحه اصلی ما مشابه زیر است که در فایل master.blade.php ذخیره میکنیم.

<!DOCTYPE HTML>
<html>
<body>
  <div id="content">
    @yield('content')
  </div>
</body>
</html>

همانطور که در کد بالا میبینید ما یک بخش(section) به نام content با دستور yield ایجاد کردیم. حالا در صفحات دیگر در اینجا فایل home.blade.php مشابه زیر عمل میکنیم.

@extends('master')

@section('content')
  <p>this is content</p>
@stop

با استفاده از دستور extends ابتدا فایل master را به عنوان Layout فراخوانی میکنیم. سپس توسط دستور section در بخش‌های مورد نظر محتوای مربوط به همان صفحه را قرار میدهیم.

استفاده از دستور yield در Layout اصلی باعث می‌شود محتوای اضافه شده همیشه به انتهای بخش مورد نظر اضافه شود اما اگر بخواهیم به ابتدای آن اضافه شود باید از دستور section استفاده کنیم.

برای مثال ما یک منو داریم که مشابه زیر به Layout اصلی اضافه میکنیم.

<!DOCTYPE HTML>
<html>
<body>
  <nav>
    @section('nav')
      <a>Home page</a>
    @show
  </nav>
  
  <div id="content">
    @yield('content')
  </div>
</body>
</html>

در کد بالا در بخش nav دیگر از دستور yield استفاده نکردیم بلکه از دستور section استفاده کردیم. حالا برای مثال میخواهیم دو تگ a، یکی در بالا و دیگری در پایین تگ a موجود در Layout اصلی اضافه کنیم. مانند زیر عمل میکنیم.

@extends('master')

@section('nav')
  <a>Contect</a>
  @parent
  <a>About Us</a>
@stop

@section('content')
  <p>this is content</p>
@stop

همچنین با استفاده از دستور include@ میتوانید صفحات دیگری را وارد کنید. همچنین میتوانید به آن‌ها مقدار نیز بفرستید.

برای مثال ما یک فایل دیگر به نام register.blade.php داریم و مشابه کد زیر میتوانیم آن را به صفحه جاری همراه با ارسال اطلاعات به آن اضافه کنیم.

@include('register', array('some'=>'data'))
این مطلب از سری مطالب، آموزش فریم ورک Laravel است
  • محمدجواد می‌گه:

    سلام
    show@ و parent@ چی کار می کنه؟
    ممنون می شوم اگر توضیح کامل با مثال واضح تری برام بزنید

  • دانیال می‌گه:

    سلام

    فکر کنم بهتر بود که می گفتی {{{test$}}} کد های html رو کامپایل نمی کنه و از حملات XSS جلوگیری می کنه.


  • نظرات این مطلب بسته است.