Bài 4 : Laravel 5 : Đưa dữ liệu ra view

học laravel 5

Ở 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 filescmd, 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 :

laravel-5-aboutme

kết quả chạy view aboutme.blade.php

 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 :

laravel-5-aboutme-1

gửi dữ liệu đơn ra view với with

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

Chia sẻ nhanh bài viết ↓

Hieu

"Những người điên rồ tới mức nghĩ mình có thể thay đổi được thế giới chính là những người có thể làm được điều đó" _ Steve Job

Subscribe
Notify of
guest

38 Bình Luận
Newest
Oldest Most Voted
Nam
Nam
6 năm trước

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

Nguyễn Mạnh Cường
9 năm trước

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!

Duy Thanh
Duy Thanh
9 năm trước

Rất hay. Thanks

Nhuong Pham
Nhuong Pham
10 năm trước

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.

dominhthao
dominhthao
10 năm trước

public function aboutme(){
return view(“aboutme”);
}
Bạn ơi update cái này nhé mình dùng aboutme.blade mà

Nguyễn Hưởng
Nguyễn Hưởng
10 năm trước

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

kien
kien
10 năm trước

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()
{
//
}…

tungnguyenthanh262635450
10 năm trước

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.!

Nam
Nam
11 năm trước

(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.

Nguyễn
11 năm trước

Sao của mình chổ {{ $name }} nó không ra kết quả nhỉ, chỉ hiên {{ $name }} thôi

Anh Vu
Anh Vu
Phản hồi đến  Nguyễn
11 năm trước

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

Nguyễn T. Đạt
Phản hồi đến  Nguyễn
10 năm trước

ở 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

38
0
Bạn có ý kiến về bài viết, hãy để lại bình luận nhé!x
()
x