Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 10: Blade template trong Laravel 8 (phần 4)

Tiếp tục về blade template trong Laravel, bài này mình sẽ giới thiệu với mọi người về kế thừa view, form và validate errror trong blade.

6. Xây dựng layout sử dụng kế thừa trong Blade.

Ở bài trước mình đã giới thiệu với mọi người về dựng layout với component trong Blade template rồi. Ngoài cách đó ra thì trong Blade template Laravel còn cho phép chúng ta dựng layout qua việc kế thừa các template nữa.

Định nghĩa layout

Để định nghĩa một layout trong blade các bạn có thể khai báo như bình thường.

Để cho dễ hiểu thì các bạn theo dõi ví dụ sau đây của mình rồi mình sẽ giải thích từng phần.

VD: Khai báo một layout trong resources/views/layouts/app.blade.php

<html>
<head>
    <title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
    This is the master sidebar.
@show

<div class="container">
    @yield('content')
</div>
</body>
</html>

Trong đó:

  • @yield directive dùng để chỉ định section có name trong yield sẽ được hiển thị.
  • @section directive dùng để định nghĩa nội dung của một section.

Kế thừa layout

Sau khi đã tạo được layout rồi, để kế thừa một layout trong blade template các bạn sử dụng cú pháp:

@extends('view.name')

Trong đó: view.name là view mà bạn muốn kế thừa.

Như mình đã nói ở trên thì @section sẽ chỉ định nội dung được hiển thị @yield tương ứng trong layout.

Trong trường hợp nội dung truyền vào section là dữ liệu ngắn đơn giản thì bạn có thể sử dụng cú pháp:

@section('name')

'Data Body'

@endsection

Trong đó:

  • name là tên của section bạn muốn truyền vào layout cha.
  • Data Body là dữ liệu bạn muốn truyền vào trong section.

VD: Mình sẽ khai báo một view kế thừa layout ở ví dụ trên.

- resources/views/home.blade.php

@extends('layouts.app')

@section('title', 'Page Title')

@section('sidebar')
    @parent

    <p>This is appended to the master sidebar.</p>
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

Kết quả: (dưới dạng view-source)

Như các bạn cũng đã thấy thì đối với @section('sidebar') mình có sử dụng directive @parent. Directive này sẽ lấy ra nội dung của @section('sidebar') trong layout cha. Nên dùng text "This is the master sidebar." sẽ vẫn được hiển thị ra. Nếu bạn không muốn hiển thị nội dung section trong layout cha thì có thể bỏ @parent directive đi.

Trong một vài trường hợp bạn muốn xác định giá trị mặc định sẽ hiển thị khi không có data truyền vào trong @yield thì bạn có thể sử dụng cú pháp sau:

@yield('name', 'Default content')

VD:

- resources/views/layouts/app.blade.php

<html>
<head>
    <title>App Name - @yield('title', 'Toidicode.com')</title>
</head>
<body>
@section('sidebar')
    This is the master sidebar.
@show

<div class="container">
    @yield('content')
</div>
</body>
</html>

- resources/views/home.blade.php

@extends('layouts.app')

@section('sidebar')
    @parent

    <p>This is appended to the master sidebar.</p>
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

Kết quả: (dưới dạng view-source)

Như các bạn đã thấy thì @yield('title') đã hiển thị giá trị là "Toidicode.com" khi mình không khai báo section ở trong view home.blade.php

7. Form trong Blade template.

Trong Blade template, Laravel cũng đã cung cấp sẵn cho chúng ta một số directive hộ trợ cho việc tạo ra các method, csrf token.

Để thêm một input field hidden chứa csrf_token trong trong form các bạn có thể sử dụng directive @csrf.

VD:

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

Kết quả: (dưới dạng view-source)

Ngoài ra bạn có thể sử dụng directive @method để thêm một input hidden chứa method của form. Vì HTML form không thể tạo được method PUT, PATCH, DELETE.

VD:

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

Kết quả: (dưới dạng view-source)

8. Hiển thị validate error message trong Blade template.

Bạn có thể sử dụng @error directive để thực hiện việc hiển thị message lỗi của validation trả về (về validation mình sẽ nói ở các bài sau).

VD:

<label for="title">Post Title</label>

<input id="title" type="text" class="@error('title') is-invalid @enderror">

@error('title')
    <div class="alert alert-danger">{{ $message }}</div>
@enderror

Trong đó $message là biến sẽ được assign data khi có error name là title.

9. Raw PHP.

Trong một số trường hợp bạn muốn sử dụng code PHP chứa logic code trong blade template bạn có thể sử dụng directive @php với cú pháp như sau:

@php(// code PHP here)

// hoặc

@php

// code PHP here.

@endphp

VD:

@php
    $message = "Toidicode.com";
@endphp

{{ $message }}

Kết quả:

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha