Bài 4: Sử dụng View trong laravel
Trong bài này chúng ta sẽ tìm hiểu đến View, một thành phần khá quan trọng trong mô hình MVC. Nhiệm vụ của View là nhận dữ liệu từ Controller và sau đó dựa vào layout của giao diện nó sẽ xử lý dữ liệu theo yêu cầu. Cũng như các Framework khác chúng ta vẫn có các khái niệm như cách tạo view, cách truyền biến qua view và quy tắc tạo view, chi tiết thế nào thì chúng ta cùng tìm hiểu nhé.
1. Tạo file view trong laravel
Trong laravel, mặc định tất cả các file view sẽ được lưu trong thư mục app/views
với đuôi file là .php
hoặc .blade.php
nếu bạn sử dụng blade-template (khuyên dùng), việc tạo thì 2 loại file này tương tự nhau, bạn chỉ việc tạo file mới trong thư mục app/views
là được. Ví dụ bạn vào thư mục app/views
tạo file freetuts.blade.php
và basic.php
thì bạn sẽ được 2 view là freetuts và basic. Nội dung trong file view thì có thể là bất cứ gì như code javascript, jquery, html, css, php, ...
Như các bạn thấy, cho dù đuôi file - phần mở rộng
cho dù khác nhau nhưng cũng là view tương tự nhau, việc gọi view cũng tương tự, chỉ khác việc sử dụng trong view mà thôi (sẽ nói ở dưới).
Tạo sub-view trong laravel
Để tạo sub-view trong laravel rất đơn giản, bạn chỉ việc tạo thư mục con và tạo file view trong đó. Ví dụ bạn muốn tạo sub-view login
của trong thư mục auth
thì làm theo bước sau:
Bài viết này được đăng tại [free tuts .net]
Bước 1: tạo thư mục auth
trong thư mục app/views
Bước 2: tạo file view login.php
trong thư mục auth
đã tạo
Vậy là bạn có sub-view rồi đấy! Ở bài sau mình sẽ giới thiệu về template .blade.php
2. Gọi view trong laravel
Để gọi view trong laravel ta dùng cú pháp sau:
View::make($view, $data = array(), $mergeData = array());
Trong đó:
$view
là tên view mà bạn đã tạo$data
là mảng dữ liệu bạn truyền cho view thao tác để hiển thị$mergeData
là mảng dữ liệu sẽ được merge với $data bằng hàm array_merge$view
là bắt buộc, còn 2 tham số còn lại là tùy chọn
Nếu bạn muốn gọi sub-view
thì sử dụng dấu chấm .
để biểu thị cho 1 cấp thư mục. Ví dụ bạn gọi đến sub-view
login
ở thư mục auth
như ví dụ ở trên thì bạn viết như sau:
View::make('auth.login');
Theo mô hình MVC thì View sẽ được gọi trong Controller nên trong laravel tương tự như vậy, tuy nhiên bạn có thể gọi nó trong route cũng được, cơ mà ai lại làm ngược như thế .
Sau khi gọi view bạn cũng có thể gán vào biến hoặc return ngay.
Ví dụ: Ở file app/routes.php
bạn thêm như sau:
Route::controller('/views','ViewController');
Sau đó tạo file ViewController.php
ở thư mục app/controllers
với nội dung như sau:
<?php class ViewController extends Controller { public function getReturn() { return View::make('return'); } public function getVariable() { $var= View::make('return'); return $var; } }
Bạn tạo file view return.blade.php
ở thư mục app/views
với nội dung như sau:
<h1>Freetuts.net</h1>
Sau đó bạn truy cập vào 2 đường dẫn:
- http://tênmiềnảocủabạn/views/return
- http://tênmiềnảocủabạn/views/variable
Thì bạn sẽ nhận được 2 kết quả giống nhau như hình dưới đây:
3. Truyền biến qua view
Ta có 3 cách truyền biến qua view như sau:
Cách 1: Truyền biến ngay khi gọi view
Ở đây là ví dụ nên mình viết ngắn gọn để hiểu về truyền biến qua view, vậy nên mình làm ở route nhưng khi làm việc các bạn không nên làm như thế mà nên đặt ở controller.
Tại file routes.php
bạn thêm đoạn code sau:
Route::get('/data', function() { return View::make('passdata',['email'=>'thinhbuzz@freetuts.net','username'=>'MrBuzz'],['nickname'=>'Buzz']); });
Bạn tạo file view passdata.blade.php
với nội dung như sau:
<p><strong>Username:</strong> {{$username}}</p> <p><strong>Email:</strong> {{$email}}</p> <p><strong>Nick:</strong> {{$nickname}}</p>
Sau đó bạn truy cập vào URL:
- http://tênmiềnảocủabạn/data
Bạn sẽ nhận được kết quả như sau:
Cách 2: Sử dụng with
Cú pháp sử dụng như sau:
View::make($view)->with($key,$value);
Trong đó:
$view
(string): là tên view sẽ được gọi$key
(string hoặc array): nếu là chuỗi thì$key
sẽ đóng vai trò là biến dùng để sử dụng trong view nếu là mảng thì mỗi khóa của mảng sẽ là 1 biến trong view$value
(string): nếu$key
là chuỗi thì$value
chính là giá trị của$key
trong view, ngược lại thì $value không có giá trị trong view.
Ví dụ:
Khi $key là mảng:
Sử dụng lại ví dụ ở phần trên, thay phần route bằng đoạn sau:
Route::get('/data', function() { return View::make('passdata')->with(['email'=>'thinhbuzz@freetuts.net','username'=>'MrBuzz','nickname'=>'Buzz']); });
Khi bạn truy cập vào thì cũng được kết quả tương tự
Khi $key là chuỗi:
Ở route bạn thêm:
Route::get('/is-string', function() { return View::make('string')->with('nickname','Buzz'); });
Bạn tạo file view string.blade.php
với nội dung như sau:
<p><strong>Nick:</strong> {{$nickname}}</p>
Sau đó bạn truy cập vào URL:
- http://tênmiềnảocủabạn/is-string
Bạn sẽ nhận được kết quả như sau:
Sử dụng magic method
Cú pháp sử dụng:
View::make($view)->withName($value);
Trong đó:
$view
(string): là tên view sẽ được gọi.- withName:
with
sẽ là bắt buộc có và viết hường.Name
ở đây là tên biến sẽ gọi trong view và chữ cái đầu tiên viết in hoa và các chữ cái còn lại viết thường.
$value
: giá trị của biến của$name
Sử dụng lại ví dụ ở trên ($key
là chuỗi), thay phần route bằng đoạn sau:
Route::get('/is-string', function() { return View::make('demo')->withNickame('Buzz'); });
Bạn cũng sẽ nhận được kết quả tương tự.
3. Kết luận
Như vậy trong bài này mình đã giới thiệu cho các bạn về view trong laravel, các bạn thấy rằng mình có nhắc đến blade rồi blade template hay những cú pháp kỳ quặc chưa từng thấy như {{$nickname}}
chẳng hạn, vậy blade là gì? Đó chính là nội dung của bài tiếp theo: Blade template engine trong laravel.