View là gì?
Đây là phần giao diện (theme) dành cho người sử dụng. Nơi mà người dùng có thể lấy được thông tin dữ liệu của MVC thông qua các thao tác truy vấn như tìm kiếm hoặc sử dụng thông qua các website.
Thông thường, các ứng dụng web sử dụng MVC View như một phần của hệ thống, nơi các thành phần HTML được tạo ra. Bên cạnh đó, View cũng có chức năng ghi nhận hoạt động của người dùng để tương tác với Controller. Tuy nhiên, View không có mối quan hệ trực tiếp với Controller, cũng như không lấy dữ liệu được từ Controller mà chỉ hiển thị và chuyển yêu cầu cho Controller mà thôi.
Truyền dữ liệu từ Controller qua View
Đầu tiên, chúng ta sẽ tìm hiểu cách render dữ liệu từ Controller sang View, sau đây là một ví dụ mẫu:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
function example()
{
return view("dashboard ", [
"title" => "Home Page",
"message" => "Hello World"
]);
}
}
Trong ví dụ trên, chúng ta sẽ hiển thị view có tên là dashboard, và dữ liệu 2 biến là title và message, Trong Laravel các file view sẽ nằm trong thư mục resources/views.
Sau đó, chúng ta sẽ hiển thị trên file blade view
<!-- resources/views/dashboard.blade.php -->
<html>
<head>
<title>{{ $title }}</title>
</head>
<body>
<h1>{{ $message }}</h1>
</body>
</html>
Trong ví dụ trên chúng ta đã tìm hiểu xong cách truyền dữ liệu từ Controller qua View.
Xác định Layout
Khi làm việc trên dự án, bạn muốn xác định master layout có thể đưa các layout khác vào. Mục tiêu của chúng ta là sử dụng ít cú pháp hơn và loại bỏ các đoạn mã trùng lặp nhau. Bạn có thể sử dụng master layout như sau:
<html>
<head>
<title>@yield('title')</title>
@section('meta_tags')
<meta property="og:type" content="website" />
@show
@section('styles')
<link rel="stylesheet" href="{{ url('/css/style.css') }}">
@show
@section('scripts')
<script src="{{ url('/js/bundle.min.js') }}"></script>
@show
</head>
<body>
@yield('content')
</body>
</html>
Extending a layout
Khi bạn có master layout, bạn có thể mở rộng layout ở các layout child, sau đây là một dạng layout child:
<!-- Stored in resources/views/child.blade.php -->
@extends('app')
@section('title', 'About Us')
@section('scripts')
@parent
<script src="{{ url('/js/analytics.js') }}"></script>
@show
@section('content')
<p>This is my body content.</p>
@endsection
If Statements
@if (count($posts) === 1)
Single Post
@elseif (count($posts) > 1)
I have multiple posts!
@else
I don't have any post!
@endif
Loops
@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 again and again.</p>
@endwhile
PHP Code
@php
//
@endphp
Include other views
<div>
@include('errors')
<!-- include a view that may or may not be present -->
@includeIf('errors')
<form>
<!-- First argument is a view, second is an array, third is the variable name for current iteration -->
</form>
</div>
Stacks
@push('scripts')
<script src="/laravel.js"></script>
@endpush
Unless
@unless (Auth::check())
You are not signed in.
@endunless
Một số cách sử dụng khác
@isset($records)
// $records is defined and is not null...
@endisset
@empty($records)
// $records is "empty"...
@endempty
@auth
// The user is authenticated...
@endauth
@guest
// The user is not authenticated...
@endguest
@switch($i)
@case(1)
First case...
@break
@case(2)
Second case...
@break
@default
Default case...
@endswitch
Tôi hy vọng bạn thích hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.