قالب ها
چیدمان های کنترلر
یکی از روش های استفاده از قالب ها در لاراول از طریق طرح بندی کنترلرها
است.
با تعیین
layout
ویژگی روی کنترلر، نمای مشخص شده برای شما ایجاد می شود و پاسخ فرضی است که
باید از اکشن ها برگردانده شود.
تعریف یک چیدمان روی یک کنترلر
class UserController extends BaseController { /** * The layout that should be used for responses. */ protected $layout = 'layouts.master'; /** * Show the user profile. */ public function showProfile() { $this->layout->content = View::make('user.profile'); } }
قالب تیغه
Blade یک موتور قالب ساده و در عین حال قدرتمند است که با لاراول ارائه شده
است.
برخلاف طرحبندیهای کنترلکننده، Blade بر اساس وراثت قالب
و
بخشها
هدایت میشود
.
همه قالب های Blade باید از
.blade.php
پسوند استفاده کنند.
تعریف طرح بندی تیغه
<!-- Stored in app/views/layouts/master.blade.php --> <html> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> </body></html>
استفاده از طرح بندی تیغه
@extends('layouts.master') @section('sidebar') @@parent <p>This is appended to the master sidebar.</p>@stop @section('content') <p>This is my body content.</p>@stop
توجه داشته باشید که نماهایی که
extend
یک طرح Blade به سادگی بخش هایی از طرح را لغو می کند.
محتوای طرحبندی را میتوان با استفاده از
@parent
دستورالعمل در یک بخش در نمای کودک گنجاند و به شما امکان میدهد به محتوای
یک بخش طرحبندی مانند نوار کناری یا پاورقی اضافه کنید.
گاهی اوقات، مانند زمانی که مطمئن نیستید که یک بخش تعریف شده است، ممکن است
بخواهید یک مقدار پیش فرض را به دستورالعمل ارسال کنید
@yield
.
می توانید مقدار پیش فرض را به عنوان آرگومان دوم ارسال کنید:
@yield('section', 'Default Content')
سایر سازه های کنترل تیغه
بازتاب داده ها
Hello, {{{ $name }}}. The current UNIX timestamp is {{{ time() }}}.
بازتاب داده ها پس از بررسی وجود
گاهی اوقات ممکن است بخواهید یک متغیر را تکرار کنید، اما مطمئن نیستید که متغیر تنظیم شده است یا خیر. در اصل، شما می خواهید این کار را انجام دهید:
{{{ isset($name) ? $name : 'Default' }}}
با این حال، به جای نوشتن یک دستور سه تایی، Blade به شما امکان می دهد از میانبر راحت زیر استفاده کنید:
{{{ $name or 'Default' }}}
نمایش متن خام با بریس های فرفری
اگر نیاز به نمایش رشته ای دارید که در پرانتزهای فرفری پیچیده شده است، می
توانید با قرار دادن پیشوند متن خود با یک
@
نماد از رفتار Blade فرار کنید:
@{{ This will not be processed by Blade }}
البته، تمام دادههای ارائهشده توسط کاربر باید حذف یا خالص شوند. برای فرار از خروجی، می توانید از نحو پرانتز سه گانه استفاده کنید:
Hello, {{{ $name }}}.
اگر نمیخواهید دادهها از بین بروند، میتوانید از بریسهای فرفری دوتایی استفاده کنید:
Hello, {{ $name }}.
توجه: هنگام بازتاب محتوایی که توسط کاربران برنامه شما ارائه می شود بسیار مراقب باشید. برای فرار از هر گونه موجودیت HTML در محتوا، همیشه از نحو پرانتز سه گانه استفاده کنید.
اگر بیانیه ها
@if (count($records) === 1) I have one record!@elseif (count($records) > 1) I have multiple records!@else I don't have any records!@endif @unless (Auth::check()) You are not signed in.@endunless
حلقه ها
@for ($i = 0; $i < 10; $i++) The current value is {{ $i }}@endfor @foreach ($users as $user) <p>This is user {{ $user->id }}</p>@endforeach @forelse($users as $user) <li>{{ $user->name }}</li>@empty <p>No users</p>@endforelse @while (true) <p>I'm looping forever.</p>@endwhile
از جمله نماهای فرعی
@include('view.name')
همچنین می توانید آرایه ای از داده ها را به نمای موجود ارسال کنید:
@include('view.name', array('some'=>'data'))
رونویسی بخش ها
برای بازنویسی کامل یک بخش، می توانید از
overwrite
عبارت زیر استفاده کنید:
@extends('list.item.container') @section('list.item.content') <p>This is an item of type {{ $item->type }}</p>@overwrite
نمایش خطوط زبان
@lang('language.line') @choice('language.line', 1)
نظرات
{{-- This comment will not be in the rendered HTML --}}
تیغه گسترش دهنده
Blade حتی به شما اجازه می دهد تا ساختارهای کنترلی سفارشی خود را تعریف
کنید.
هنگامی که یک فایل Blade کامپایل می شود، هر پسوند سفارشی با محتویات view
فراخوانی می شود که به شما امکان می دهد هر کاری از
str_replace
دستکاری های ساده گرفته تا عبارات منظم پیچیده تر را انجام دهید.
کامپایلر Blade با متدهای کمکی
createMatcher
و
createPlainMatcher
, که عبارتی را که برای ساختن دستورالعمل های سفارشی خود نیاز دارید را
تولید می کند.
این
createPlainMatcher
روش برای دستورات بدون آرگومانهایی مانند
@endif
و
@stop
در حالی که
createMatcher
برای دستورالعملهای دارای آرگومان استفاده میشود.
مثال زیر یک
@datetime($var)
دستورالعمل ایجاد می کند که به سادگی فراخوانی می
->format()
کند
$var
:
Blade::extend(function($view, $compiler){ $pattern = $compiler->createMatcher('datetime'); return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\'); ?>', $view);});