10 دستور جذاب برای کار با blade ها در لاراول

10 دستور جذاب برای کار با blade ها در لاراول

laravel blade برای شما این امکان را فراهم می کند تا به سادگی کدهای php را به بخش view اضاف نمایید. در این مطلب قصد داریم 10 دستور عالی و جذاب برای کار با blade ها در لاراول را به شما آموزش دهیم.

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

laravel blade برای شما این امکان را فراهم می کند تا به سادگی کدهای php را به بخش view اضاف نمایید. در واقع blade ها بصورت کش شده هستند و پس از تغییر جدید بروز می شوند.

 

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

 

1. @include

دستور include یکی از دستوراتی می باشد که در بلید ها ما به دفعات از آن استفاده می کنیم. این دستور به شما اجازه می دهد که یک بلید دیگر را در بلید خود فراخوانی و از تمام متغیر های blade والد درون آن نیز استفاده نمایید. دستور @include بصورت زیر می باشد:

@include('partials.sidebar')

 شما همچنین می توانید بصورت دستی نیز مقادیر دلخواه را به عنوان دومین پارامتر به ویوی مورد نظر با استفاده از تابع include پاس دهید:

@include('partials.sidebar',['menu' => $menu])

مثلا در نمونه ی بالا ما در بلید sidebar به مقداری بنام $menu دسترسی خواهیم داشت و می توانیم از مقادیر آن استفاده نماییم.

 

2. @push & @stack

شما در بلید ها میتوانید بخش های با استفاده از push ایجاد نمایید و سپس در بلید های فرزند با استفاده از stack آن را دریافت کنید.

برای نمونه شما بلیدی بنام header.blade.php دارید که یک stack بصورت زیر در آن تعریف میکنید:

<head>
    <!-- Head Contents -->

    @stack('scripts')
</head>

شما در بلید والد میتوانید محتوای آن را بصورت زیر ایجاد نمایید:

@push('scripts')
    <script src="/example.js"></script>
@endpush

حال در head سایت هنگام بارگذاری فایل js فراخوانی خواهد شد.

 

3. @php

از این دستور می توانید برای استفاده کدهای php درون بلید ها استفاده نمایید:

@php
// you php code here
@endphp

 

4. @hasSection

ممکن است هنگام ایجاد طرح ها و بلید های پیچیده بخواهید چک کنید که آیا section در بلید کنونی موجود هست یا خیر. برای این کار می توانید از تابع hasSection استفاده نمایید:

 

    @hasSection('navigation')
        @yield('navigation')
@endif

 

5. @each

از این دستور می توانید برای ایجاد حلقه و قراردادن مقادیر استفاده نمایید. دستور کلی بصورت زیر می باشد:

@each('users.index', $users, 'user')

فرض کنید شما یک بلید بنام user.index دارید که شامل کدهایی html می باشد که میخواهید کاربران سایت را در آن نمایش دهید. با استفاده از کد بالا می توانید بلید، مقدار ورودی و متغییر خود را تعیین و به بلید مورد نظر پاس دهید. ( همانند کار با حلقه @foreach)

این تابع همچنین ورودی دیگری میگیرد که در صورت خالی بودن مقدار $users آن بلید را نمایش خواهد داد:

@each('users.index', $users, 'user', 'users.not_found')

مثال:

ما بلیدی داریم که کدهای نمایش مطالب را بصورت زیر در جدولی نمایش میدهیم:

     <table class="table table-bordered">
            <thead>
            <tr>
                <th>عنوان</th>
            </tr>
            </thead>
            <tbody>
            @foreach($articles as $article)
            <tr id="{{$article->id}}">
                <th>{{$article->title}}</th>
            </tr>
            @endforeach
            </tbody>
        </table>

حال می تواینم با استفاده از تابع @each بصورت زیر نیز خروجی بالا را ایجاد نماییم. برای اینکار یک فایل بنام row_article.blade.php ایجاد می کنیم و سپس کدهای بالا را بصورت زیر تغییر میدهیم:


        <table class="table table-bordered">
            <thead>
            <tr>
                <th>عنوان</th>

            </tr>
            </thead>
            <tbody>
            @each('row_article',$articles,'$article')
            </tbody>
        </table>

همچنین محتویات بلید row_article نیز بصورت زیر خواهد بود:

<tr id="{{$article->id}}">
              
  <th>{{$article->title}}</th>
    </tr>

 

6. @includeWhen

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

برای نمونه در کد زیر اگر مقدار $isUserAdmin وجود داشته باشد بلید مورد نظر فراخوانی خواهد شد

@includeWhen($isUserAdmin, 'users.admin_card', ['user' => $user])

 

7. @json

از این متغییر می توانید برای تبدیل یک متغیر به json در بلید خود استفاده نمایید:

<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>

 

8. @isset & @empty

این دو دستور نیز همان کارهای دستوری های empty و isset در php برای برای بررسی خالی بودن یا وجود یک متغییر بررسی می کنند:

@if(isset($users))
// your logic here
@endif

@if(empty($users))
// your logic here
@endif
@isset($users)
// your logic here
@endisset

@empty($users)
// your logic here
@endempty

 

9. @inject

از این دستور می توانید برای دریافت یک سرویس در بلید خود استفاده نمایید.

ورودی اول این دستور نام سرویس شما و ورودی دوم آدرس کلاس یا اینترفیس مربوطه می باشد:

@inject('menu', 'App\Services\MenuService')

// then in your view

{!! $menu->render() !!}

 

10. @csrf & @method

 

هنگام ایجاد فرم ها می توانید از دستور @csrf برای ایجاد یک input بصورت hidden که حاوی توکن می باشد استفاده نمایید:

<form method="POST" action="/profile">
    @csrf

    ...
</form>

خروجی دستور @csrf یک input بصورت زیر خواهد بود:

    <input type="hidden" name="_token" value="DHlsiFUIuKktV0OWBaRZbYkfcKwvEKJ0n9fQzrQB">

 

همانطور که می دانید در html نمی توانیم متد های put, delete و patch را ایجاد کنیم. تابع @method یک input بصورت hidden  به فرم ما اضاف میکند که می توانید متد مورد نظر را در آن قرار دهیم:

<form action="/foo/bar" method="POST">
    @method('PUT')

    ...
</form>

کد بالا یک input بصورت زیر در فرم ما ایجاد خواهد کرد:

       <input type="hidden" name="_method" value="PUT">

 

امیدوارم از این آموزش لذت برده باشید. اگرسوالی یا پیشنهادی دارید یا متدهای بهتری برای کار با بلید ها می شناسید از بخش نظرات برای ما ارسال کنید.


دسته بندی ها:

لاراول

ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
امیرحسین پورحسین
خیلی کاربردی و مهم بود و اینکه بشدت خوشم اومد از بلاگت

پاسخ به این نظر