Thứ Năm, 18 tháng 6, 2015

Tìm hiểu Controller trong Laravel 4.X

Tìm hiểu Controller trong Laravel 4.X

Ở bài trước chúng ta đã được tìm hiểu về Route và View trong Laravel. Tiếp tục chuỗi bài tìm hiểu về Laravel Framework tôi xin giới thiệu tới các bạn phần tiếp theo Tìm hiểu Controller trong Laravel 4.X

Cũng ở bài trước chúng ta đã thây được sự linh hoạt và mạnh mẽ đến từ route trong Laravel, nó cho phép chúng ta thực thi trực tiếp một quá trình thông qua route mà không cần xử lý bởi Controller. Tuy nhiên đối với các dự án có độ lớn và phức tạp cao thì chúng ta nên thao tác chúng với Controller giúp cho việc xây dựng và vận hành một cách linh hoạt cũng như sự dễ dàng phát triển sau này.

Điều đầu tiên khi làm việc với Controller trong Laravel ta tạo một file trong thư mục app/controllers theo cấu trúc tên file như sau: tên_fileController.php

Ví dụ: tintucController.php, sanphamController.php …

Để hiểu rõ hơn quá trình làm việc trong Controller ta đi làm một ví dụ như sau. Tạo một file có tên là WebController.php với nội dung :
<?php
 Class WebController extends BaseController{
   public function index(){
     $data = array(
       "name"=>"Thế Giới WEB",
       "website"=>"thegioiweb.net.vn"
     );
     return view::make(webView, $data);    
   }
 }
?>
Ở đây chúng ta đã tạo ra một lớp controller với tên là WebController được kế thừa từ lớp ban đầu BaseController. Trong lớp WebController ta xây dựng phương thức index. Và trong phương thức index ta gọi đến views có tên là webView và tham số truyền là mảng $data.

Tiếp đến ta tạo một file view có tên là webView.php có nội dung như sau :
<?php
 echo $name."---".$website;
?>
Sau đó ta khai báo trong file routes.php như sau :
<?php
 Route::get("web","WebController@index");
?>
Và truy cập với đường dẫn http://localhost/laravel/public/web

Kết quả
Thế Giới WEB---thegioiweb.net.vn
Trong trường hợp bạn muốn truyền giá trị từ route tới controller ta sẽ thực thi như sau:

Trước hết, trong quá trình lap trinh PHP này,  ta cần khai báo trong Route đối số ta mong muốn:
Route::get("web/content/{webName}","WebController@welcome");
Sau đó ta tạo phương thức welcome() với đối số là $website như sau:
<?php
class WebController extends BaseController{
    public function welcome($website){
        return "WELCOME TO ".$website;
    }
}
Ta chạy đường dẫn: localhost/laravel/public/web/welcome/thegioiweb.net.vn

Kết quả
WELCOME TO thegioiweb.net.vn

Nguồn: the gioi web
Tìm hiểu Route và View trong Laravel 4.X

Tìm hiểu Route và View trong Laravel 4.X

Trong phần này chúng ta sẽ đi tìm hiểu Route và View trong Laravel 4.X. Nếu như các bạn đã từng làm việc với một Framework bất kỳ thì chắc hẳn không còn xa lạ gì với khái niệm Route và View nữa. Tuy nhiên trong Laravel thì Route có sức mạnh hơn nhiều, bạn có thể dễ dàng thao tác trực tiếp với route mà không cần thiết phải tạo Controller.

Route trong Laravel

Để 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ố);

Trong đó:

  • tên_định_danh :  là đường dẫn trong ứng dụng mà người dùng chỉ định.
  • tham_số : là thao tác muốn thực thi với tên định danh trên.
  • method : là một trong các phương thức được định nghĩa dưới đây
  • post: dành cho các thao tác lấy dữ liệu từ form.
  • 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.
  • put: dành cho thao tác lấy dữ liệu từ form (nhưng là cập nhật bản ghi).
  • delete: thao tác xóa bỏ.
  • any: là sự tổng hợp của các thao tác ở trên.


Ví dụ: Ghi thêm nội dung như sau vào file app/routes.php
Route::get("web","TGWController@show");
Câu lệnh trên sẽ được hiểu khi ta truy cập đường dẫn http://localhost/laravel/public/web thì nó sẽ gọi đến controller “TGW” và action “show”

Nếu muốn gửi kèm tham số thì cũng rất đơn giản như cú pháp dưới
Route::get("web/{param}", function($param){
   echo "Chào mừng bạn đến với ".$param;
});
Sau đó ta truy cập vào thanh địa chỉ duyệt web và nhập nội dung: http://localhost/laravel/public/web/thegioiweb.net.vn

Kết quả
Chào mừng bạn đến với thegioiweb.net.vn
Lưu ý:

Đôi khi tham số truyền vào của bạn không chắc chắn sẽ tồn tại thì ta sẽ sử dụng dấu (?) đằng sau tham số. Tuy nhiên đây cũng là một điểm nhạy cảm để hacker có thể tấn công website của chúng ta. Do vậy cần thật sự cẩn thận khi học php và khéo léo khi sử dụng đối số truyền vào trong quá trình làm dự án.

View trong Laravel

Để sử dụng views trong Laravel ta sử dụng cú pháp sau:
return View::make("tên_view",tham_số);

Trong đó:

  • tên_view: là tên file view cần triệu gọi (không có phần mở rộng)
  • tham_số: là tham số truyền sang view, có thể có hoặc không.


Ví dụ: Tạo một file view có tên là webView.php và triệu gọi vào như sau:
Route::get("web",function(){
    return View::make("webView");
});
Nếu muốn truyền tham số vào view ta có thể sử dụng một trong những cách sau:

1. Sử dụng tham số truyền là một mảng đơn thuần
Route::get("web",function(){
    $data['webName']= "Thế Giới WEB";
    return View::make("webView",$data);
});
2. Sử dụng phương thức with()
Route::get("web",function(){
    return View::make("webView")->with("webName"=>"Thế Giới WEB");
});
3. Sử dụng hàm compact()
Route::get("web",function(){
    $webName = "Thế Giới WEB";
    return View::make("webView",compact("webName"));
});
Bạn có thể lựa chọn 1 trong 3 cách trên để truyền tham số sang View (khuyến khích sử dụng cách 1 và 3). Sau đó bạn có thể sử dụng tham số được truyền qua View một cách tùy ý. Giả sử tôi chỉ dùng để in ra giá trị của biến được truyền sang View , thì ở views tôi tạo một file có tên là webView.php với nội dung như sau:
<?php
 echo "Chào mừng bạn đến với ".$webName;
?>

 Kết quả
Chào mừng bạn đến với Thế Giới WEB

Thứ Tư, 17 tháng 6, 2015

Tìm hiểu Filter trong Laravel 4.X

Tìm hiểu Filter trong Laravel 4.X

Trong bài trước chúng ta đã đi tìm hiểu Controller trong Laravel. Tiếp theo chúng ta sẽ đi Tìm hiểu Filter trong Laravel 4.X. Vậy Filter là gì và dùng để làm gì?

Filter là một bộ lọc, nó có chức năng lọc dữ liệu từ phía người dùng trước hoặc sau khi nó chạm tới Route. Do đó, nếu bạn tận sử dụng filter một cách thông minh thì website của bạn sẽ được an toàn hơn, điều này sẽ giúp bạn xử lý dữ liệu tối ưu hơn.

Filter trong Laravel sẽ cho phép bạn kiểm tra dữ liệu một cách độc lập sau đó lồng ghép một cách khéo léo vào route mà bạn mong muốn. Thì ngay khi request tới với route sẽ bị lọc bởi filter và xử lý. Nếu hợp lệ thì mới tiếp tục đi tới route còn nếu không thì sẽ thực thi một yêu cầu do bạn đặt ra.

Để thiết lập filter ta vào file filters.php và tạo filter với nội dung :
Route::filter('tên_filter',hàm_xử_lý);
Ví dụ: Kiểm tra thời gian hiện tại là buổi sáng hay buổi chiều ta có
Route::filter('check_time',function($route,$request){
    if(date('A') == "AM"){
        return "Buổi sáng!";
    }
});
Ta có hàm date(‘A’) sẽ trả về AM hoặc PM tùy theo thời gian của hệ thống. Ta sử dụng filter để lọc nếu thời gian là buổi sáng (AM) thì sẽ trả về ngay giá trị “Buổi sáng!” mà không đưa yêu cầu tới route.

Bây giờ ta tiến hành filter vào route

Mở file routes.php thêm vào cú pháp sau:
Route::get("thoigian/checktime",array("as"=>"checktime","before"=>"check_time","uses"=>"ThoigianController@showtime"));
Bạn thấy đấy, trong mảng đối số truyền vào, tôi thiết lập filter với khóa before chỉ tới check_time. Sau đó đẩy nó sang controller thoigian với action là showtime.

Tạo tiếp file ThoigianController.php với nội dung sau:
<?php
class ThoigianController extends BaseController{
    public function showtime(){
        return "Buổi chiều!";
    }
}
Truy cập tới địa chỉ: localhost/laravel/public/thoigian/showtime.

Lưu ý: Filter chia ra 2 loại là before và after.

  • Before: Nghĩa là request trước khi tới routing
  • After: Nghĩa là request sau khi tới routing.

Tuy nhiên, trong thực tế khi lập trình PHP, người ta thường sử dụng before là chính, còn after chỉ sử dụng thực hiện các công đoạn dọn dẹp. Ví dụ như hủy biến, hủy phiên làm việc,….

Truyền giá trị vào Filter

Để truyền giá trị vào filter ta sử dụng cú pháp
tên_Filter:giá trị

Ta có thể tùy chỉnh lại ví dụ ở trên như sau:
Route::filter('check_time',function($route,$request,$param){
    if(date('A') == "AM"){
        return "Buổi sáng!";
    }
});
Lưu ý: chúng ta có thêm một tham số $param trong function. Và $param này chính là giá trị chúng ta truyền từ quá trình thiết lập ở Route.

Giờ sửa lại phần routes.php như sau:
Route::get("thoigian/checktime",array("as"=>"checktime","before"=>"check_time:PM","uses"=>"ThoigianController@showtime"));
Và truy cập lại đường dẫn : localhost/laravel/public/thoigian/showtime để xem kết quả.

Nguồn: the gioi web