PHP Online

Laravel Framework 4.x

Laravel 4.x: Tìm hiểu khái niệm Route và View

Trong bài hướng dẫn này, tôi sẽ hướng dẫn bạn thao tác làm việc với Router và các khái niệm view cơ bản trong laravel framework. Có thể nói đây là thế mạnh tuyệt vời của Laravel, nó giúp người sử dụng có thêm nhiều tùy chọn trong việc viết ứng dụng. Nếu các bạn đã từng làm việc qua với các framework khác thì hẳn sẽ không còn xa lạ gì với khái niệm về Router phải không nào. Mục đích của router là định tuyến đến những controller cụ thể nào từ phía request của người sử dụng. Đây cũng là điều dễ thấy trong các PHP Framework phổ biến hiện nay.
 
Nhưng với laravel framework, chúng ta có thể thấy được sự khác biệt rõ ràng với route. Bạn có thể không cần thiết phải tạo ra controller mà thực thi những công việc mong muốn 1 cách trực tiếp tại route dễ dàng. Bởi kết hợp theo phương pháp closure quen thuộc trong javascript để thực thi điều đó.
 
Một ví dụ nhỏ để các bạn hiểu thêm về nó.
 
Route::get("abc",function(){
    return "Hello QHOnline - With Laravel Tutorial";
}); 

Bạn thấy đấy, khi người dũng gõ từ đường dẫn cụ thể. Ví dụ: localhost/laravel/public/abc thì nội dung hiển thị ra bên ngoài sẽ là "Hello QHOnline - With Laravel Tutorial" phải không nào.

 

Chúng ta, có thể tùy biến lên cao nhất với route một cách dễ dàng trong laravel framework. Đây là điều mà các PHP Framework hiện nay vẫn chưa thể làm được một cách hoàn hảo như Laravel.

 

Vậy để thực thi được nó, ta cần đi từ sự cơ bản nhất nào. Nếu bạn chưa thực sự cài đặt được laravel, xin hãy dành thời gian xem lại bài Laravel 4.x: Hướng dẫn cài đặt và chạy ví dụ đầu tiên .

 

Để làm việc được với route trước hết ta tiếp xúc chúng với công thức cơ bản như sau:

Route::method('Tên định danh',Tham số);

Method trong laravel xây dựng dựa trên Restful vì thế, nếu có dịp tôi sẽ đề cập về nó cho bạn hiểu rõ trong những bài sau. Nhưng cơ bản là nó có các cơ chế: post, get, put, delete, any.

 

Với post: dành cho các thao tác lấy từ form như thêm record.


Với get: dành cho các thao tác truy cập thông thường tương đương với request cơ bản trong PHP.


Với put: dành cho thao tác lấy từ form nhưng là cập nhật record.


Với delete: dành cho các thao tác thực thi hành động xóa bỏ.


Với any: là sự tổng hợp của các thao tác ở trên.

 

Tuy là có 5 method nhưng chúng ta chỉ quan tâm đến 2 method chính là get và post mà thôi.

 

Tên định danh nghĩa là chúng ta chỉ ra đường link mong muốn trong ứng dụng.

 

Tham số: Những thao tác mà chúng ta mong muốn với định danh trên. Tham số có thể là hàm xử lý, có thể là array() chứa các thông tin xử lý khác, có thể là sự ám chỉ cụ thể 1 controller nào đó cho định danh,...

 

Tới đây, chúng ta thấy với sự đa dạng trong tham số, ta hoàn toàn có thể kết hợp để tạo ra những mong muốn tùy thích dễ dàng phải không nào.

 

Một ví dụ nhỏ về nó như sau:

 

Mở file app/routes.php và thêm vào dòng này:

Route::get("abc","QHOController@demo");  

Có nghĩa là khi truy cập đường link: localhost/laravel/public/abc nó sẽ gọi controller QHO với action là demo.

 

Nếu bạn mong muốn gởi kèm một tham số thì sao ?. Chuyện đó không khó, trong laravel ta định danh tham số dựa vào ký tự sau: {tên}. Và ở function thiết lập ta xem nó như đối số trong hàm. 

 

Ví dụ:

Route::get("abc/{id}",function($id){
    return "Hello QHOnline - Your ID: $id - With Laravel Tutorial";
}); 

Chạy liên kết kiểm tra nó ta sẽ có:


localhost/laravel/public/abc/9999 Thì kết quả sẽ hiển thị là:

 

Hello QHOnline - Your ID: 9999 - With Laravel Tutorial

 

Nhiều bạn sẽ thắc mắc, lỡ như tham số của chúng ta không phải lúc nào cũng có thì sao ?. Laravel đã tính dùm bạn rồi, nếu bạn không chắc việc tồn tại của đối số đó bạn hãy khai báo thêm dấu ? trong route và thiết lập nó trong function cho hợp lý.

 

Ví dụ:

Route::get("abc/{id?}",function($id=null){
    if($id!=null){
         return "Hello QHOnline - Your ID: $id - With Laravel Tutorial";
    }else{
         return "Hello QHOnline - With Laravel Tutorial";
    }
});  

Như thế là xong thôi, đơn giản phải không nào.

 

Hãy cẩn thận với việc tiếp nhận đối số, vì đối số cũng là 1 trong những thứ hacker dùng để khai thác website của bạn. Vì thế, bạn cũng nên có sự kiểm soát đối số cho phù hợp với mong muốn trước khi dùng nó cho công việc nào đó của bạn.

 

Laravel giúp bạn làm điều đó như sau:

Route::get("abc/{id?}",function($id=null){
    if($id!=null){
         return "Hello QHOnline - Your ID: $id - With Laravel Tutorial";
    }else{
         return "Hello QHOnline - With Laravel Tutorial";
    }
})->where(array("id"=>"[0-9]+"));  

Bạn thấy đấy, ta kết hợp thêm phương thức where() để yêu cầu dữ liệu phải là số thì mới có thể được thực thi. Điều đó sẽ đảm bảo cho bạn an toàn hơn trước những kế hoạch quậy phá của hacker.

 

Routing trong laravel là một chủ đề dài, và trong 1 vài bài viết tôi khó có thể chia sẻ hết cho bạn. Vì Route trải rộng trên hầu hết các vấn đề trong laravel, do vậy nếu nói trước trong thời điểm mới này sẽ khiến các bạn rơi vào trạng thái ngán ngẩm. Nên tôi sẽ chọn những thời điểm thích hợp để nói về route cho các bạn đỡ cảm thấy chán ngán với nó. Còn vấn đề tiếp theo của chúng ta lúc này là nên nói về view. Một trong những thành phần mà đi đâu ta cũng dùng, làm gì thì cũng phải đụng tới nó.

 

Views trong laravel dĩ nhiên được đặt trong thư mục views rồi, bạn có thể thấy nó ở trong thư mục app/views

 

Các file có đuôi mở rộng là .php với các mã lệnh lập trình.

 

Để sử dụng nó, thì cũng đơn giản thôi. Ta sẽ triệu gọi như sau:

return View::make("Tên",Đối số nếu có);

Ví dụ:

Route::get("abc",function(){
    return View::make("abcd");
});  

Kế tới ta tạo file abcd.php trong thư mục view với nội dung là:

 

Hello QHOnline - With Laravel Tutorial

 

Và chạy lại đường liên kết: localhost/laravel/abc ta sẽ thấy kết quả sẽ như cũ, chỉ là ta đang tải dữ liệu từ một file view khác chứ không phải viết trực tiếp ở trong route như lúc đầu.

 

Vậy nếu ta muốn truyền đối số cho view thì sao. Cũng đơn giản thôi, bạn có nhiều cách để làm điều đó.

 

Cách 1: Sử dụng đối số

Route::get("abc",function(){
    $data['id']= "9999";
    return View::make("abcd",$data);
}); 

Với cách này bạn đang truyền sang view abcd.php một đối số có tên là $id mang giá trị là 9999. Do vậy tại abcd.php bạn có thể dùng nó như sau:

echo "Your ID: $id";  

Cách này, với những bạn nào đã quen sử dụng Codeigniter sẽ cảm thấy rất đơn giản phải không nào. Vì nó là cách mà codeigniter vẫn sử dụng để truyền đối số cho view. 

 

Cách 2: truyền qua 1 phương thức tên with().

Route::get("abc",function(){
    return View::make("abcd")->with("id"=>"9999");
});  

Và ở view abcd.php ta hoàn toàn có thể sử dụng $id dễ dàng. Nhưng với cách này, bạn sẽ rất khó để truyền nhiều giá trị cho view. 

 

Cách 3: Sử dụng hàm compact() trong PHP.

Route::get("abc",function(){
    $id=9999;
    return View::make("abcd",compact("id"));
});  

Và ở view abcd.php bạn chỉ việc sử dụng $id một cách dễ dàng.

 

Cách 1 và cách 3 là 2 cách mà tôi khuyến khích các bạn sử dụng. Vì nó rất hiệu quả trong việc thao tác sau này. Nhất là khi bạn muốn đẩy nhiều dữ liệu về view để thao tác.

 

Trong trường hợp bạn muốn thao đặt view trong thực mục cho gọn gàng. Bạn có thể sử dụng phân cách, thay vì là dấu / thì bạn sẽ dùng dấu .

 

Ví dụ:

Route::get("abc",function(){
    return View::make("demo.abcd");
});  

Nghĩa là bạn đang load view từ thư mục views/demo và file load là abcd.php.

 

Tổng kết:

 

Qua bài này, chúng ta đã hiểu được ít nhiều các vấn đề thao tác liên quan đến router và view rồi phải không nào. Trong bài tiếp theo, tôi sẽ giới thiệu về khái niệm controller, đề từ đó ta có thể kết hợp với route, view, controller tạo cho ứng dụng trở nên linh hoạt hơn.

Khóa học Laravel Framework 4.x


(Bùi Quốc Huy)
13786
Bạn vẫn chưa hiểu rõ vấn đề ?. Bạn vẫn còn nhiều điều thắc mắc ?. Bạn gặp lỗi khi thực hành mã lệnh trên ?. Hãy tham gia diễn đàn QHOnline.Info để nhận được sự giúp đỡ từ phía cộng đồng nhanh nhất. Đồng thời tải những tài liệu giá trị tại diễn đàn. Việc đăng ký là hoàn toàn miễn phí, hãy đăng ký ngay để chúng tôi giúp đỡ bạn nhé.

Ghi rõ nguồn từ website QHOnline.Info - Khi bạn phát hành lại thông tin từ website này

Ý kiến cho bài viết này.