😂Laravel Blade passing variable @include, @extends full (ok)

https://stackoverflow.com/questions/29739745/laravel-blade-passing-variable-with-string-through-include-causes-error

Example 1

C:\xampp\htdocs\marinesTeam26\resources\views\parts\frontend\site-top.blade.php

@include("parts.frontend.test",['some' => 'datasss'])

C:\xampp\htdocs\marinesTeam26\resources\views\parts\frontend\test.blade.php

{{ $some }}

Example 2

C:\xampp\htdocs\marinesTeam26\resources\views\parts\frontend\inner\site-top.blade.php

@extends('parts.frontend.site-top',['title' => 'Page Title'])
@section('title_1')
  <span>千葉 純一郎 様 </span>
@endsection
@section('title_color_1')
  <a class="btn-custom" style="background-color:#F5D465;" href="#">ゴールド会員</a>
@endsection

Sử dụng trong blade master

<div class="wrapper {{ $title ?? "default" }}">

C:\xampp\htdocs\marinesTeam26\resources\views\parts\frontend\site-top.blade.php

<section class="site-top">
  <div class="container">
    App Name - {{ ucfirst($title) }}
    @yield("title_1")
    @yield("title_color_1")
  </div>
</section>

Bài đăng này đã không được cập nhật trong 3 năm

Như các bạn đã biết Laravel Blade là một công cụ để thể hiện view trong Laravel, hay nói cách khác nôm na khi chạy lên chương trình thì nó sẽ như một file HTML vậy. Chúng được tạo bởi các file có đuôi là .blade.php và nằm trong thư mục resource/views của framework Laravel. Và hôm nay mình sẽ giới thiệu 12 Directives mà bạn sẽ có thể hay phải dùng tới khi làm việc với Laravel Blade nhé, bắt đầu nào 😄

Đầu tiên là phải kể đến @include một Directive hay dùng nhất khi chúng ta làm việc với view blade, nó cho phép đưa một view ở một file blade khác vào view này của bạn. Ví dụ một trang có 3 phần cơ bản là header.blade.php, content.blade.php, footer.blade.php thì ở trong file content.blade.php ta có thể include phần view header và footer như sau:

@include('header')

    <body>
        // your content
    </body>

@inlcude('footer')

Hoặc bạn cũng có thể truyền kèm theo một mảng dữ liệu qua view như sau:

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

Laravel Blade cho phép xác định một trình giữ chỗ được gọi stack và sau đó đẩy các giá trị sang stack đó. Điều này có thể rất hữu ích để gọi một hoặc nhiều file javascript theo yêu cầu của từng trang view khác nhau.

@push('scripts')
    <script src="/example.js"></script>
@endpush
<head>
    <!-- Head Contents -->

    @stack('scripts')
</head>

@php
 // code php here
@endphp

Khi tạo bố cục phức tạp trong Laravel Blade, bạn có thể kiểm tra xem một phần có nội dung bằng cách sử dụng @hasSection để thực hiện việc kiểm tra này.

@hasSection('navigation')
    <div class="pull-right">
        @yield('navigation')
    </div>

    <div class="clearfix"></div>
@endif

@each của Laravel Blade cho phép bạn kết hợp vòng lặp và đưa vào một dòng. Ví dụ:

@each('view.name', $jobs, 'job')

Trong đó, view.name là phần view sẽ hiển thị cho từng phần của $job, còn $job sẽ là biến dùng để lặp để gán từng phần vào biến job. Ngoài ra bạn cũng có thể truyền đối số thứ tư để hiển thị view nếu đối tượng hoặc mảng đó rỗng

@each('view.name', $jobs, 'job', 'view.empty')

@includeWhen là phần mở rộng của @include. Lệnh này sẽ bao gồm một view nếu điều kiện đã cho là đúng.

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

Trong ví dụ trên thì @includeWhen() sẽ kiểm tra giá trị của biến $isUserAdmin và nếu biến đó đúng, nó sẽ bao gồm cả view của riêng quản trị viên là users.admin_card.

Đôi khi bạn có thể chuyển một mảng vào view của mình với ý định hiển thị nó dưới dạng JSON để khởi tạo một biến JavaScript. Ví dụ:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>

Tuy nhiên, thay vì gọi thủ công json_encode, bạn có thể sử dụng lệnh @json của Blade. Lệnh này chấp nhận các đối số tương tự như json_encode của PHP

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

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

Ví dụ giờ bạn phải hiển thị hết tên của một danh sách người dùng thì bạn chỉ việc dùng @foreach để lặp đúng không? Nhưng nếu thêm yêu cầu là phải kiểm tra xem danh sách đó có dữ liệu hay chưa thì bạn lại thêm câu điều kiện @if vào như sau:

@if($users->count() > 0)
	@foreach($users as $user)
		{{ $user->name }}
	@endforeach
@else
	No Users Found	
@endif
@forelse($users as $user)
	{{ $user->name }}
@empty
	No Users Found
@endforelse

// đơn giản và clear hơn rất nhiều đúng không :P

Nếu bạn đang hiển thị các biến JavaScript trong một phần lớn của view, bạn có thể gói HTML trong @verbatim để bạn không phải đặt tiền tố cho mỗi câu lệnh echo Blade bằng một ký hiệu @ nữa

@verbatim
    <div class="container">
        Hello, {{ name }}.
    </div>
@endverbatim

Thông thường trong PHP chúng ta sử dụng hàm isset()empty() để kiểm tra xem giá trị của biến có trống hay không thì trong Laravel Blade sẽ cung cấp @isset()@empty() để thay thế mã PHP thông thường.

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

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

Trong Blade sẽ thành như sau:

@isset($users)
// your logic here
@endisset

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

@inject được sử dụng để truy xuất từ Service Container của Laravel và đưa vào view của bạn.

Đối số đầu tiên được truyền cho @inject này là một tên biến mà service sẽ được đặt vào, trong khi đối số thứ hai là Service mà bạn muốn gọi đến.

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

// then in your view

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

Khi bạn tạo Form trong Blade thì cần dùng @csrf để khai báo trường CSRF ẩn dùng để xác thực yêu cầu.

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

    ...
</form>

Bên cạnh đó thì từ khi HTML không hỗ trợ các method PUT, PATCH và DELETE thì trong Blade bạn sẽ cần phải thêm một method ẩn _method để spoof những động từ HTTP. Lệnh @method trong Blade có thể tạo trường này cho bạn:

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

    ...
</form>

Last updated