Bài 10: Laravel – Views
Trong framework MVC, thì chữ V là Views. Views được lưu trữ trong thư mục resources/views. Thường thường view chứa đựng HTML. Example Step 1: tạo file test.php trong view với nội dung sau: <html> <body> <h1> Hello, World </h1> ...
Trong framework MVC, thì chữ V là Views. Views được lưu trữ trong thư mục resources/views. Thường thường view chứa đựng HTML.
Example
Step 1: tạo file test.php trong view với nội dung sau:
<html>
<body>
<h1>Hello, World</h1>
</body>
</html>
Step 2: thêm dòng code sau vào file định tuyến:
Route::get(‘/test’, function(){
return view(‘test’);
});
Step 3: chạy http://localhost:8000/test
Step 4: output
Truyền Dữ Liệu Tới Views
Khi xây dựng ứng dụng, có thể được yêu cầu chuyển dữ liệu tới views. Chuyền một mảng tới chức năng view helper. Sau khi chuyển một mãng, chúng ta có thể sử dụng key để lấy giá trị chủa key đó trong file HTML.
Example
Step 1: sữa nội dung file test.php đã tạo ở trên với nội dung sau:
<html>
<body>
<h1><?php echo $name; ?></h1>
</body>
</html>
Step 2: sữa nội dung file định tuyến với test như sau:
Route::get(‘/test’, function(){ return view(‘test’,[‘name’=>’Ku Tin’]);});
Step 3: giá trị của key ‘name’ sẽ được chuyển tới test.php và $name sẽ được thay thế bởi giá trị đó.
Step 4: chạy http://localhost:8000/test
Step 5: output
Chia Sẽ Dữ Liệu Với Tất Cả Views
Chúng ta đã thấy chúng ta có thể chuyển dữ liệu tới views như thế nào rồi. Nhưng ở các thời điểm, có một nhu cầu chuyển dữ liệu tới tất cả views. Laravel tạo cái này đơn giản hơn. Có một phương thức gọi là “share()” mà có thể được sử dụng cho mục đích này. Phương thức share() sẽ có 2 đối số, key và value.
Phương thức share() có thể được gọi từ phương thức khởi động của service provider. Chúng ta có thể sử dụng bất kỳ service provider, AppServiceProvider hoặc service provider của riêng chúng ta.
Example
Step 1: thêm các dòng code sau vào file định tuyến
Route::get(‘/test1’, function(){
return view(‘test1’);
});
Route::get(‘/test2’, function(){
return view(‘test2’);
});
Step 2: Tạo 2 file view là test1.php và test2.php với cùng code. Copy code sau vào 2 file này:
<html>
<body>
<h1><?php echo $name; ?></h1>
</body>
</html>
Step 3: thay đổi code của phương thức boot trong app/Providers/AppServiceProvider.php như bên dưới. (ở đây chúng ta đã sử dụng phương thức share và dữ liệu mà chúng ta chuyển qua sẽ được chia sẽ tới tất cả views).
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
view()->share(‘name’, ‘Dam Me Lap Trinh’);
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
Step 4: chạy
http://localhost:8000/test1
http://localhost:8000/test2
Blade Templates
Blade là ngôn ngữ giao diện của Laravel và cú pháp nó rất đơn giản để học. Một template blade chứa đựng mở rộng là blade.php và được lưu trữ ở resources/views.
Blade cũng hổ trợ tất cả cấu trúc chính yếu của PHP để tạo vòng lặp và điều kiện : @for, @foreach, @while, @if và @elseif, cho bạn tránh mở và đóng tab <?php mổi nơi trong template của bạn. Lợi thế chính của việc sử dụng template Blade là chúng ta có thể cài đặt master template và master template này có thể được mở rộng bởi các trang cá nhân khác.
Example
Step 1: tạo master template và lưu nó ở resources/views/layouts/master.blade.php
<html>
<head>
<title>@yield(‘title’)</title>
</head>
<body>
@section(‘sidebar’)
This is the master sidebar.
@show
<div class = “container”>
@yield(‘content’)
</div>
</body>
</html>
Step 2: diễn giải tí code trên:
- @yield(‘title’) được sử dụng để hiển thị giá trị của title
- @section(‘sidebar’) được sử dụng để định nghĩa một section đặt tên sidebar
- @show được sử dụng để hiển thị nội dung của một section trang con
- @yield(‘content’) được sử dụng để hiển thị nội dung của content
Step 3: bây giờ tạo một trang khác và kế thừa master template và lưu nó ở resources/views/page.blade.php
@extends(‘layouts.master’)
@section(‘title’, ‘Page Title’)
@section(‘sidebar’)
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section(‘content’)
<h2>{{$name}}</h2>
<p>This is my body content.</p>
@endsection
Step 4: Mô tả mổi nhân tố:
@extends(‘layouts.master’) được sử dụng để kế thừa master layout. Ở đây layouts là tên của thư mục, nơi chúng ta lưu trử master template và “.master” tên của file template “master.blade.php” tham chiếu tới tên của nó mà không cần đưa mở rộng blade.php
- @section(‘title’, ‘Page Title’): set giá trị của title section
- @section(‘sidebar’): định nghĩa sidebar section trong trang con của master layout.
- @parent: hiễn thị nội dung của sidebar section, đã định nghĩa trong master layout.
- <p>: thêm đoạn trong thẻ này tới nội dung của sidebar section
- @endsection: kết thúc section
- @section(‘content’): định nghĩa nội dung section và thêm đoạn nội dung trong nó tới phần nội dung master.
Step 5: thêm định tuyến
Route::get(‘blade’, function () {
return view(‘page’,array(‘name’ => ‘Mohammad Aladin’));
});
Step 6: http://localhost:8000/blade
Lưu ý: trong 2 trang ví dụ trên giữa master và trang con có cấu trúc gọi lẩn nhau: như trong master bạn thấy phần @section(‘sidebar’) This is the master sidebar @show, chú ý câu lệnh @show là để bạn đổ dữ liệu phần section của trang con, nhìn vào kết quả bạn thấy nó ra dòng This is appended to the master sidebar. Còn bên trang con thì sao, bạn khai báo để bắt đầu hiễn thị section sidebar : @section(‘sidebar’) @parent ….endsection.
Bạn thấy câu lệnh @parent dùng để hiễn thị nội dung của thèn master cho dòng “This is the master sidebar”, vậy rõ ràng là chúng bổ sung và gọi qua lại để hiễn thị, cũng dể hiểu mà phải không các bạn.
Một điểm lưu ý nữa là khi bạn muốn hiễn thị section bạn có thể dùng @yield, hoặc bạn có thể chỉ định section trước rồi sau đó @show như: @section(‘content’) @show = @yield(‘content’).