peri hokiperihokiclarustologisticsrimashaop.compola taktis menang gates of olympus x1000 perihokipemain perihoki bongkar trik jepep starlight princess x1000perihoki beri panduan lengkap bermain mahjong ways 2 pgsofttips cara penghasil uang pgsoft mahjong ways 2 perihokimahjong wins 3 perihoki memberikan penggali terbesarfenomena gates of olympus buka peluang besar bagi duta76cara dapat pola emas rahasia di duta7 wild west goldtrik menang pgsoft mahjong ways 2 modal receh maxwin duta76duta76 main pgsoft mahjong ways 2 di sela istirahatscatter hitam mahjong wins 3 spin pasti jepe duta76perihoki spin mahjong ways 2 pgsoft scatter hitam maxwinsimbol mahjong wins 3 yang sering muncul di awal perihokitrik gampang menang mahjong winscuan mahjong wins 3 tanpa hentipola spin taruhan kecil mahjong winsstrategi kunci scatter hitam beruntungacor total mahjong wayskemenangan maksimal mahjong wayskemenangan pria pekanbaru mahjong waysmahjong wins3 fenomena baru sumatera baratmenangkan mahjong dengan lincahmenembus batas keberuntungan mahjong waysmenjajal keberuntungan di mahjong wayspola gratis mahjong ways1scatter hitam senjata rahasia mahjong winsteknik spinning menguntungkan untuk scatter hitamanalisis rtp tertinggi mahjong winsfenomena scatter hitam mahjong winsibu rumah tangga dan keberuntungan mahjongkeseruan main mahjong wins3menang mahjong pengguna baru di sosial mediamenghargai setiap momen di mahjong waysserunya main mahjong di warung internetspin slow motion mancing scatterstrategi jitu maxwin mahjong waysstrategi jitu menang mahjong modal kecil jackpot besaranak kampung papua menggemparkan mahjongkeajaiban scatter hitam mahjong wayskeberhasilan joni mahjong winskejaiban mahjong ways di ujung jalanketua mahjong wins3 kehadiran kemenangan dimulai dari balimahjong kehadiran yang menguntungkanmahjong menggila adat88panduan kilat raih 108 jutatips memenangkan mahjongbarista kopi menang 110 juta spin mahjongdakota76 scatter hitam mahjong wins 3gagal cpns menang mahjong wins 3 rp120 jutakisah karyawan minimarket dapat thr lebih awal mahjong winskisah pelajar sma kuasai mahjong wins 3 inspirasi sekolahkisah penjaga parkir tanah abang motor baru mahjong winskisah sukses ibu rumah tangga bandung mahjong winsmahasiswa kkn beli iphone15 mahjong wins3 dakotamantan anak band influencer mahjong scatter hitampola rtp senin gates of olympus guru matematikatukang cuci motor menemukan keberuntungan di mahjong

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 282

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_cookie_params(): Cannot change session cookie parameters when headers already sent

Filename: Session/Session.php

Line Number: 294

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 304

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 314

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 315

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 316

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 317

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 375

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: drivers/Session_files_driver.php

Line Number: 108

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_save_handler(): Cannot change save handler when headers already sent

Filename: Session/Session.php

Line Number: 110

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_start(): Cannot start session when headers already sent

Filename: Session/Session.php

Line Number: 143

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

Sử dụng Route::filter và Route::group trong laravel
LARAVEL 4X CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 07: Sử dụng Route::filter và Route::group trong laravel

Ở bài trước mình mình đã giới thiệu về Route::controllerRoute::resource nhưng mình nghĩ rằng bạn sẽ có thắc mắc cần được giải đáp như sau:

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
  • Nếu nhiều route thì gom nó thành một nhóm được không?
  • Nếu muốn lọc người dùng theo điều kiện mới được vào thì sao, ví dụ người dùng chưa đăng nhập thì không thể xem link đó được?

Câu trả lời là có thể nha các bạn:

  • Muốn nhóm chúng lại thì đã có Route::group.
  • Muốn lọc theo điều kiện thì đã có Route::filter.

Vậy trong bài này chúng ta sẽ cùng tìm hiểu về 2 loại route này nhé.

1. Route::filter trong laravel

Loại route này được tạo ra nhằm mục đích chính là lọc theo điều kiện. Ví dụ bạn muốn link http://tênmiềnảocủabạn/routefilter chỉ được xem sau 11h đêm tới 6h sáng hôm sau chẳng hạn, thì ta sử dụng Route::filter để tạo bộ lọc. Tất cả các bộ lọc (filter) này thường được đặt ở app/filters.php

Bài viết này được đăng tại [free tuts .net]

Cú pháp sử dụng:

Route::filter($name, $callback);
//trong đó $name (một chuỗi) sẽ là cái tên mà bạn sẽ dùng để gọi đến filter này
//$callback (chuỗi hoặc hàm trả về kết quả): là hàm sẽ thực thi filter này

Ví dụ Route::filter trong Laravel

Ta sẽ thực hiện ví dụ mà đã đề cập ở trên đó là thiết lập thời gian hoạt động cho phép của một Controller.Đẻ thực hiện chức năng này ta sẽ có hai cách như sau:

  • Sử dụng tham số $callback trong Filter dạng hàm trả về kết quả
  • Sử dụng tham số $callback trong Filter dạng chuỗi

Nhưng trước tiên ta tạo mới một controller có tên là HomeController và controller này được dùng chung cho cả hai cách mình sẽ trình bày dưới đây:

//Đây chỉ là một ví dụ nhỏ, bạn chưa cần để ý đến controller này nhiều
class HomeController extends Controller {
	public function allowed( ){
		return 'be allowed view';
	}
	public function filter( ){
		//để dòng này chạy đúng, bạn vào file app/config/app.php sửa timezone thành 'Asia/Ho_Chi_Minh'
		//đây là 1 thư viện mà laravel dùng để xử lý thời gian
		$now=\Carbon\Carbon::now();
		//kiểm tra nếu giờ lớn hơn 1 và bé hơn 11 thì xuất ra thông báo "không được phép xem"
		if(($now->hour > 1) && ($now->hour <11))
			return 'The time: '.$now->toDateTimeString().' not allowed to see (function)';
		else
			return 'The time: '.$now->toDateTimeString().' be allowed view (function)';
	}
}

Cách 1: Dùng $callback là 1 hàm trả về kết quả

Bạn mở file app/filters.phpthêm vào đoạn code sau:

Route::filter('filter.demo',function(){
	//để dòng này chạy đúng, bạn vào file app/config/app.php sửa timezone thành 'Asia/Ho_Chi_Minh'
	//đây là 1 thư viện mà laravel dùng để sử lý thời gian
	$now=\Carbon\Carbon::now();
	//kiểm tra nếu giờ lớn hơn 1 và bé hơn 11 thì xuất ra thông báo "không được phép xem"
	if(($now->hour > 1) && ($now->hour <11))
		return 'not allowed to see';
});

Ở ví dụ này mình sẽ dùng Route::get, bạn thêm vào file app/routes.php nội dung như sau:

Route::get('/filter-before',['before'=>'filter.demo','uses'=>'HomeController@allowed']);
Route::get('/filter-after',['after'=>'filter.demo','uses'=>'HomeController@allowed']);

Bây giờ bạn truy cập vào 2 đường dẫn:

  • http://tênmiềnảocủabạn/filter-before
  • http://tênmiềnảocủabạn/filter-after

Và bạn sẽ nhận được 2 kết quả hoàn toàn khác nhau như sau (lúc mình chạy thử là 2h23p sáng):

su dung route filter va route group trong laravel PNG

su dung route filter va route group trong laravel 2 PNG

Cùng 1 filter sử dụng trong cùng một url tới một action của một controller nhưng kết quả lại ra hoàn toàn khác nhau. Lý do tại sao? Bạn hãy để ý đến đoạn code trên Route::get ở trên trong mảng action của Route::get có before và after, 2 giá trị này cho thấy thứ tự thực hiện của filter. Before thì filter sẽ được kiểm tra trước khi mà Controller@action được chạy, after thì ngược lại, Controller@action chạy xong thì filter này mới hoạt động.

Cách 2: Dùng $callback là một chuỗi

Chuỗi này có cấu trúc là TênController@action nhưng cách này ít khi được áp dụng. Cũng lấy ví dụ tương tự ở trê nhưng ở $callback mình sẽ trỏ đến action filter của HomeController. Như vậy ỏ file app/filters.php bạn thêm như sau:

//filter.string là tên của filter này
Route::filter('filter.string','HomeController@filter');

app/routes.php bạn thêm như sau (cú pháp cũng tương tự như trên nên mình không giải thích lại):

Route::get('/filter-string-before',['before'=>'filter.string','uses'=>'HomeController@allowed']);
Route::get('/filter-string-after',['after'=>'filter.string','uses'=>'HomeController@allowed']);

Bây giờ bạn truy cập vào 2 đường dẫn:

  • http://tênmiềnảocủabạn/filter-string-before
  • http://tênmiềnảocủabạn/filter-string-after

Và bạn sẽ nhận được 2 kết quả như sau:

su dung route filter va route group trong laravel 3 PNG

su dung route filter va route group trong laravel 4 PNG

Giải thích tương tự như cách một. Tuy nhiên có sự khác biệt đó là thay vì kiểm tra thời gian trong Filter thì nó sẽ kiểm tra trong Controller.

Khi nào Sử dụng filter của laravel

Tùy theo mục đích sử dụng thì bạn có thể dùng filter ở routes hay Controller (vì chưa học đến Controller nên mình chưa nhắc đến cách dùng). Quay lại ví dụ ở bài tổng quan về route trong Laravel ta sẽ hình dung được việc nên dùng filter ở đâu. Ví dụ ở trang admin thì bạn muốn người có quyền admin mới được vào, vậy nên tốt nhất thì ở ngay vị trí người chỉ đường (route) bạn kiểm tra ngay (filter) nếu không phải là admin thì không được vào. Nhưng ví dụ về trang bài viết, bạn muốn ai cũng có quyền xem, nhưng quyền viết bài thì phải đăng nhập rồi mới được viết bài, vậy thì nên kiểm tra ở Controller (cách làm sẽ hướng dẫn ở bài Controller sau).

2. Route::group trong laravel

Loại route này được dùng để gom chung các loại route khác có chung một đặc điểm gì đó mà bạn muốn đưa chúng vào một nhóm. Ví dụ bạn muốn đưa các route trong trang quản trị về một nhóm và các route về việc hiển thị nội dung cho người dùng về một nhóm thì bạn có thể dùng loại route này để làm điều đó.

Cú pháp sử dụng:

Route::group($attributes, $callback);
/*trong đó $attributes là 1 mảng chứa các option
- before: gọi đến filter trước khi $callback được thực hiện
- after: gọi đến filter sau khi $callback được thực hiện
- namespace: đây là namespace chung cho các Controller trong group
- prefix: tiền tố cho các uri bên trong $callback
- domain: chưa cần để ý đến option này */

Giải thích các option quan trọng trong Route::group (before và after tương tự những bài trước nên mình không nhắc lại):

Option namesapce trong Route::group

Ví dụ bạn có HomeController, IndexController, PostController, ... ở namespace là Indexs, thay vì bạn phải viết Indexs\HomeController, Indexs\IndexController, ... thì bạn có thể sử dụng đến option namespace này, ví dụ:

Route::group(['namespace'=>'Indexs'],function(){
	//nếu không sử dụng option namespace thì bạn phải viết
	//Route::get('/post','Indexs\PostController@showPost');
	Route::get('/post','PostController@showPost');
});

*Việc tại sao sử dụng namespace sẽ được nói đến trong bài về Controller (hãy đón đọc).

Option prefix trong Route::group

Giả sử bạn có trang admincp, vậy chắc chắn sẽ có nhiều route có uri dạng /admincp/*, mà cứ dòng nào cũng /admincp/post, /admincp/comment, /admincp/....

Bạn sẽ nhận thấy rằng các uri này sẽ có chung tiền tố là /admincp, mà cứ viết lặp đi lặp lại hoài như vậy sẽ không hay chút nào. Giải pháp đưa ra là sử dụng Route::group với option prefix:

Route::group(['prefix'=>'/admincp'],function(){
	Route::get('/comments','CommentController@showComment');
	//các route khác
});

Ở ví dụ trên, ta sẽ có được url như sau http://tênmiềncủabạn/admincp/comments

3. Kết luận

Như vậy trong bài này mình đã tìm hiểu về 2 route dường như ít có công dụng về mặt lập trình nhiều nhưng lại có ý nghĩa với về mặt logic. Nếu không có 2 route này thì code của bạn sẽ chẳng biết là phải thêm bao nhiêu dòng. trong file route.php của bạn và dẫn tới việc quản lý route trở nên khó khăn hơn. Cám ơn bạn đã theo dõi serie.

Cùng chuyên mục:

Cách sử dụng Relationships trong Laravel

Cách sử dụng Relationships trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách dùng URL Generation trong Larevel

Cách dùng URL Generation trong Larevel

Cách sử dụng Email Verification trong Laravel

Cách sử dụng Email Verification trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Sử dụng Service Container trong Laravel dễ dàng

Sử dụng Service Container trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách dùng Event Sourcing trong Laravel

Cách dùng Event Sourcing trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Real-time web applications là gì ? Tầm quan trọng  trong Laravel

Real-time web applications là gì ? Tầm quan trọng trong Laravel

Cách tạo Database Testing trong Laravel

Cách tạo Database Testing trong Laravel

Top