19/09/2018, 15:16

Laravel 4.x: Tìm hiểu cơ bản về khái niệm Controller

Laravel 4.x: Tìm hiểu cơ bản về khái niệm Controller Kết thúc bài trước, chúng ta đã đề cập về Routing và View trong Laravel Framework được vận hành như thế nào. Thông qua bài đó, tuy chưa thật sự nắm hết các vấn đề liên quan đến Routing và View nhưng bạn đã có cái ...

Laravel 4.x: Tìm hiểu cơ bản về khái niệm Controller

Kết thúc bài trước, chúng ta đã đề cập về Routing và View trong Laravel Framework được vận hành như thế nào. Thông qua bài đó, tuy chưa thật sự nắm hết các vấn đề liên quan đến RoutingView nhưng bạn đã có cái nhìn cơ bản và toàn diện về hai khái niệm đóng vai trò quan trọng trong Laravel Framework. Tiếp tục trong bài này, chúng ta sẽ nói về khái niệm Controller, một khái niệm quan trọng mà bạn có thể bắt gặp nó ở bất kỳ PHP Framework nào.
 
Laravel cho bạn sự vận hành trực tiếp trong Routing thông qua cách viết closure, nhưng khi bạn phải xử lý các thao tác phức tạp và nhiều thì tốt hơn hết, bạn nên thao tác chúng trên Controller. Có như thế thì ứng dụng của bạn mới trở nên linh hoạt và dễ mở rộng sau này.
 
Trước khi xem bài này. Nếu bạn chưa biết gì về Laravel, tôi khuyến cáo bạn nên xem lại bài Hướng dẫn cài đặt và chạy ví dụ đầu tiên với Laravel Framework để bắt nhịp bài viết này dễ dàng hơn.
 
Để thao tác với controller, trước hết bạn cần tạo trong thư mục app/controllers một file theo cơ chế: TênController.php. Ví dụ: DemoController.php
 
Trong file trên ta xây dựng bởi những đoạn lệnh mở đầu như sau:
<?php 
class DemoController extends BaseController{ 
    public function index(){ 
        return View::make("demo.index")->with("title","Xin chào QHOnline"); 
    } 
}

Như bạn thấy, với mã lệnh ở trên. Chúng ta tạo ra DemoController kế thừa lớp chủ đạo là BaseController và phương thức đầu tiên ta xây dựng là index(). Trong phương thức này ta thực hiện việc gọi view từ thư mục views/demo, nạp tập tin index.php. Đồng thời ta truyền sang view một biến tên title với giá trị là "Xin chào QHOnline".

Kế tới, ta tạo ra file index.php trong thư mục views/demo với mã lệnh sau:

<?php 
    echo $title; 
?>

Sau cùng, ta cần khai báo trong file routes.php như sau:

<?php 
Route::get("demo","DemoController@index"); 
?>

Chạy đường dẫn như sau: localhost/laravel/public/demo

Bạn sẽ thấy thông báo hiển thị như mong đợi.

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, ta cần khai báo trong Route đối số ta mong muốn:

Route::get("demo/content/{id}","DemoController@getContent");  

Sau đó ta tạo thêm phương thức getContent() với đối số là $id như sau:

<?php 
class DemoController extends BaseController{ 
    public function index(){ 
        return View::make("demo.index")->with("title","Xin chào QHOnline"); 
    } 
    public function getContent($id){ 
        return "Your ID: $id"; 
    } 
}

Như bạn thấy, khi ta chạy đường dẫn: localhost/laravel/public/demo/content/9999 thì kết quả sẽ hiển thị như mong đợi.

Khi đã thành thạo, ta thiết lập Route cho chuyên nghiệp 1 chút như sau:

Route::get("demo/content/{id}",array("as"=>"content","uses"=>"DemoController@getContent"));  

Với phần route ở trên, thay vì ta đưa vào DemoController@getContent ở đối số thứ 2. Thì nay ta mở rộng ra bởi việc đưa vào đối số ấy là một mảng, với những đối số tùy chỉnh nâng cao hơn.

Ở đối số trên ta có:

+ as: là tên của route, việc này sẽ giúp bạn dễ dàng lấy được thông tin của Route trong ứng dụng bởi việc sử dụng thư viện URL::route("tên",array('chứa đối số')).

+ uses: Chúng ta chỉ ra Route này sẽ sử dụng controller nào và action nào.

+ before : Sử dụng filter chặn trước khi request tới. Ta sẽ đề cập sau trong bài tìm hiểu về Filter trong laravel framework.

Để ví dụ cho việc định danh trên, ta sửa lại phần view của index.php như sau:

<?php 
echo $title;  
$url=URL::route("content",array('9999')); 
echo " <a href='$url'>Click here</a>"; 
?>

Vì route của chúng ta có yêu cầu truyền đối số là id. Nên ta sẽ gọi nó ở view bởi việc sử dụng lớp URL với phương thức route truyền vào 2 đối số. Đối số đầu là tên của route là content và đối số thứ 2 chính là tham số cho id của ứng dụng.

Chạy lại đường link: localhost/laravel/public/demo

Bạn sẽ thấy xuất hiện thêm đường link trên chữ click here.

Giờ bạn hãy áp dụng để thực hiện bài tập nhỏ này nhé.

Bài tập:

Xây dựng Controller music với các action tương ứng: index, add, edit, del. Action index sẽ có liên kết đưa về các thao tác liên quan đến add, edit, del. 2 Action edit, del phải truyền vào đối số để cho biết xóa hoặc sửa bài hát nào.

Yêu cầu: Sử dụng Controller Music thiết lập, kết hợp với từng view thao tác trên Laravel Framework.

Tổng kết:

Như vậy, có lẽ bạn đã hiểu được ít nhiều quy trình làm việc với controller phải không nào. Tuy chưa phải là trọn vẹn các vấn đề về controller trong laravel, nhưng bạn đã nắm được một vài mấu chốt quan trọng trong Controller rồi đấy. Ở bài tiếp theo, tôi sẽ hướng dẫn các bạn tìm hiểu về filter trong laravel framework. Qua đó bạn có thể kết hợp bộ sức mạnh Routing - Filter - Controller trong ứng dụng dễ dàng.

Khóa học Laravel Framework 4.x


(
Nguồn Qhonline
0