Bài 4 : Laravel 5 : Đưa dữ liệu ra view
Ở bài trước, chúng ta đã biết được cách 1 controller gọi chỉ định 1 view để hiển thị dữ liệu, vậy thì khi controller muốn đưa dữ liệu ra view trong Laravel 5 thì phải làm thế nào ? Bài viết hôm nay sẽ giải đáp cho các bạn điều đó.
Đưa dữ liệu ra view trong Laravel 5
a. Tạo PagesController.php
Đầu tiên mình sẽ tạo 1 controller mới đặt tên là PagesController.php trong thư mục Controllers của Laravel. Bạn có thể tạo file 1 cách thủ công, nhưng ở phạm vị bài viết này, mình sẽ tận dụng php artisan của Laravel 5 để tạo PagesController.php, và mình cũng khuyên các bạn nên học cách sử dụng php artisan nếu có thể để giúp phát triển ứng dụng nhanh hơn.
Để tạo PagesController.php mình sẽ làm như sau. Mở cmd (Ấn phím window , trong mục Search programs and files gõ cmd, rồi enter), gõ dòng lệnh sau để di chuyển đến thư mục chưa laravel 5 của chúng ta
cd C:/wamp/www/laravel-5
tiếp đến gõ lệnh dưới đây để laravel tự động generate ra file PagesController.php
php artisan make:controller PagesController
sau khi chạy lệnh trên, vào thư mục Controllers bạn sẽ thấy file PagesController.php đã được tạo tự động với các hàm default như sau :
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PagesController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
}
}
nếu như bạn cảm thấy rằng, bạn không cần dùng tới quá nhiều hàm default như vậy, mà chỉ cần tạo ra file PagesController.php trắng, thì thay đổi lại lệnh trên (thêm –plain ) như sau:
php artisan make:controller PagesController --plain
thì bạn sẽ được 1 file PagesController.php mới gọn gàng như thế này :
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PagesController extends Controller {
//
}
Tiếp theo, mình thêm function aboutme() vào class PagesController vừa tạo để gọi view aboutme được đặt trong folder pages
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PagesController extends Controller {
public function aboutme(){
return view("pages.aboutme");
}
}
b. Tạo routes
Trong file routes.php, bạn tạo 1 đoạn routes mới như sau để sử dụng PagesController ở trên
Route::get('/aboutme', 'PagesController@aboutme');
c.Tạo views aboutme.blade.php
Trong folder pages ở thư mục views (xem lại bài trước), mình sẽ tạo 1 file view mới đặt tên là aboutme.blade.php . Bạn sẽ thắc mắc tại sao không phải là aboutme.php mà lại là aboutme.blade.php thì mình xin thưa là aboutme.php hay aboutme.blade.php đều được, nhưng thêm blade nghĩa là bạn đang dùng template cho view , về phần này mình sẽ nói kĩ hơn trong bài viết sau này. Giờ thì các bạn hãy tạm chấp nhận vậy nhé 🙂
Gợi ý xem : Khóa học tạo website với Laravel 5 tặng mã giảm giá 40% + Hỗ trợ việc làm sau khi học xong
Tiếp tục, thông tin trong file aboutme.blade.php của mình sẽ như sau :
<html> <head> <meta charset="UTF-8"> <title>About me</title> </head> <body> <h1>About me</h3> <p>I'm Hieu, I'm PHP Developer, I love you ^_^</p> </body> </html>
Vào trình duyệt, gõ địa chỉ
http://localhost/laravel-5/public/aboutme
bạn sẽ được kết quả như sau :
4. Gửi dữ liệu ra view
Đây chỉnh là phần quan trọng chính trong bài viết ngày hôm nay. Nhìn lại 1 chút ở ví dụ trên, bạn sẽ thấy mình đơn giản chỉ là từ PagesController chúng ta gọi view about me, vậy thì nếu từ trong PagesController ta có dữ liệu nào đó và muốn gửi ra ngoài view thì phải làm thế nào ?
Gợi ý: Bạn đang quan tâm đến Bitcoin? Tìm hiểu ngay Bitcoin Toàn Tập Cho Người Mới nhé!
Dưới đây mình sẽ chỉ ra 1 số cách giúp bạn đưa dữ liệu ra ngoài view từ controller.
Cách 1 : Đưa dữ liệu đơn ra ngoài view với phương thức with
Sửa lại function aboutme() trong controller 1 chút như sau :
public function aboutme(){
$data= 'My name is Hieu';
return view("pages.aboutme")->with('name',$data);
}
Ở đoạn code trên, với phương thức with bạn đã gửi dữ liệu với key là name và value là $data ra ngoài view. Tiếp đến chúng ta sẽ sửa lại file aboutme.blade.php như sau để bắt lấy dữ liệu gửi ra từ controller như sau :
<html>
<head>
<meta charset="UTF-8">
<title>About me</title>
</head>
<body>
<h1>About me {{ $name }}</h3>
<p>I'm Hieu, I'm PHP Developer, I love you ^_^</p>
</body>
</html>
F5 lại trình duyệt bạn sẽ được kết quả như sau :
Awesome ! thật tuyệt vời phải ko nào ? Laravel đã tự động parse key là name thành biến $name khi ra ngoài view, và với cách viết {{ $name }}, Laravel đã echo dữ liệu “My name is Hieu” ra ngoài trình duyệt cho bạn, thay vì bạn phải viết như thế này <?php echo $name ?>. Đó chưa phải là toàn bộ công dụng của dấu {{ }} thần thánh này đâu, bạn sẽ hiểu nhiều hơn về công dụng tuyệt với của nó khi bạn có cơ hội gặp phải sau này 🙂
Cách 2 : Đưa nhiều dữ liệu ra ngoài view với phương thức with
Sửa lại function aboutme() trong PagesController.php 1 tí như sau :
public function aboutme(){
$name = 'My name is Hieu';
$age = '24';
return view("pages.aboutme")->with([
'name' => $name,
'age' => $age
]);
}
Sửa lại file aboutme.blade.php như sau :
<html>
<head>
<meta charset="UTF-8">
<title>About me</title>
</head>
<body>
<h1>About me {{ $name }} {{ $age }}</h3>
<p>I'm Hieu, I'm PHP Developer, I love you ^_^</p>
</body>
</html>
F5 lại trình duyệt và xem kết quả nhé 🙂
Cách 3 : Gửi dữ liệu ra ngoài view không dùng từ khóa with
Sửa function aboutme() thành như sau :
public function aboutme(){
$name = 'My name is Hieu';
$age = '24';
$data = [];
$data['name'] = $name;
$data['age'] = $age;
return view("pages.aboutme",$data);
}
Giữ nguyên file aboutme.blade.php, không chỉnh sửa gì thêm và F5 lại trình duyệt, xem kết quả nhé.
Kết thúc bài viết đưa dữ liệu ra view trong Laravel 5. Bạn thấy đó, Laravel thật tuyệt vời phải không nào? chi riêng cái việc gửi dữ liệu ra ngoài view và cách view hiển thị dữ liệu thôi mà bạn đã thấy laravel cũng cấp cho bạn đầy đủ tùy chọn “màu mè hoa lá cành” đến mức nào. Mình dừng bài viết ở đây, chúc các bạn học tốt. Nếu có bất kỳ thắc mắc hay góp ý thì để lại comment bên dưới nhé, Thân !
Có thể bạn quan tâm: Tặng coupon 40% giá trị khóa học tạo website với Laravel 5




Anh ơi, giờ cái chỗ Routes ý thì không là Route::get(‘/aboutme’, ‘PagesController@aboutme’); sao ý anh
Em phải để là
Route::get(‘/aboutme’,function(){
return view(‘aboutme’);
});
Trong Routes/web.php thì mới được, Vậy có cách nào nhanh hơn không anh
Route::get(‘/aboutme’, ‘PagesController@aboutme’); vậy là bình thường mà e, e kiểm tra lại xem PagesController đã được tạo chưa?
Nếu a làm 1 seri video project về lrv5 để mọi người rõ hơi về 1 roject hoàn chỉnh thì thật hoàn hảo :).
Thanks a!
nếu có nhiều thời gian thì a sẽ làm, nhưng vì lý do a rất bận, không thể quản lý hết nổi website nên em thông cảm nhé. Tks e
Nếu a có thể a sẽ làm, hiện giờ thì mọi thứ chỉ có 1 mình a quản lý 🙁
Rất hay. Thanks
Mình rất khâm phục những người đi chia sẻ kiến thức như bạn. Cảm ơn bạn rất nhiều.
cám ơn bạn nhiều nhé 🙂
public function aboutme(){
return view(“aboutme”);
}
Bạn ơi update cái này nhé mình dùng aboutme.blade mà
Sao mình làm ở bước tạo controller mà nó không sinh ra các function mặc định nhỉ, mặc dù mình không gõ thêm -plain phía sau
Rất cảm ơn bạn về những bài viết.
Cho minh hỏi chút. Minh thưc hiện các bước cài đặt như bạn hướng dẫn khi mở các Route, Controller.. không thấy hiển thị đầy đủ các Route, Controller, vidu:
Route::get(‘/’, ‘WelcomeController@index’); hay cac phuong thưc trong Controller khi tạo Controller trong artisan:
public function index()
{
//
}…
Cho mình hỏi? Nếu mình sử dụng css, mình thấy khi tạo project đã có sẵn 1 folder (\vendor\phpunit\php-code-coverage\src\CodeCoverage\Report\HTML\Renderer\Template) chứa css, trong file master mình khai báo đường dẫn ntn?
Chỉ cho mình với.!
(help)Sao mình làm Router rồi, Tạo PagesController, tạo view aboutme.blade.php rồi mà khi gõ http://localhost/laravel5/public/aboutme lại thông báo The requested URL /laravel5/public/aboutme was not found on this server.
Sao của mình chổ {{ $name }} nó không ra kết quả nhỉ, chỉ hiên {{ $name }} thôi
Nếu {{ $name }} không hiện thì dùng cho nhanh. Của mình cũng không hiện kết quả khi dùng 2 dấu ngoặc nhọn
ở view tên file phải có thêm blade mới dùng được nhé bạn. Ví dụ : [tên_view].blade.php