Controller
I- Introduction
II- App controller
III- Pages controller
IV- Các thuộc tính của controller
V- Các phương thức của controller
I- Introduction
1 controller được sử dụng để quản lý logic của 1 ứng dụng
Hầu hết các controller được sử dụng để quản lý logic cho 1 single model. Ví dụ, nếu bạn đang buid một site cho một trang bakery thì yêu cầu application của bạn phải có: 1 RecipesController và 1 IngredientsController để quản lý các recipes và các ingredients.
Recipe model được xử lý bởi RecipesController, Product model được xử lý bởi ProductsController …
Các lớp controller kế thừa từ lớp AppController của CakePHP ( AppController kế thừa lớp Controller trong CakePHP – đây là một thư viện của CakePHP). Lớp AppController có thể được định nghĩa trong /app/app_controller.php và nó chứa các phương thức được share giữa các controller trong ứng dụng.
Controller có thể bao gồm các phương thức actions( Actions là các phương thức mà chỉ được sử dụng để hiển thị lên view → các phương thức action này nằm trong controller )
theo mô hình MVC thì dispatcher sẽ gọi action khi có 1 yêu cầu từ user tương ứng.
Quay trở lại ví dụ trang backery của hồi đầu, RecipesController có thể chưa view(), share() và search(). Controller này có thể nằm trong /app/controllers/recipes_controller.php và có thể có code như bên dưới:
# /app/controllers/recipes_controller.php
class RecipesController extends AppController {
function view($id) {
//action logic goes here..
}
function share($customer_id, $recipe_id) {
//action logic goes here..
}
function search($query) {
//action logic goes here..
}
}
?>
II- App controller
Như đã giới thiệu ở trên, lớp AppController là một lớp cha của tất cả các lớp controller trong ứng dụng. Bản thân AppController kế thừa lớp Controller trong thư viện CakePHP. AppController được định nghĩa trong /app/app_controller.php :
class AppController extends Controller {
}
?>
Vì lớp AppController là lớp cha của các lớp controller trong ứng dụng, do đó mà các thuộc tính và các method trong lớp AppController sẽ có thể được share và sử dụng bởi các lớp kon.
III- Pages Controllers
CakePHP hỗ trợ chung ta Pages Controller ( cake/libs/controller/pages_controller.php). Trang chủ( home page ) mà bạn thấy sau khi cài đặt là được tạo ra bằng cách dùng controller này. Page controller thường được dùng để tạo ra các trang tính.
Ví dụ: bạn tạo trang About. ( bạn tạo 1 file view /app/views/pages/about_us.ctp, bạn truy cập nó bằng cách sử dụng đường dẫn http://example.com/pages/about_us
để sử dụng Pages controllers, chúng ta chỉ cần copy pages_controllers.php từ core của CakePHP đến ứng dụng của mình.
IV- Các thuộc tính của controller
1- $name
→ được dùng để thiết lập tên của controller
→ thông thường thì đây là hình thức số nhiều của tên model mà controller sử dụng
Ví dụ:
# $name controller attribute usage example
class RecipesController extends AppController {
var $name = 'Recipes';
}
?>
2- $components, $helpers and $uses
ví dụ:
class RecipesController extends AppController {
var $name = 'Recipes';
var $uses = array('Recipe', 'User');
var $helpers = array('Ajax');
var $components = array('Email');
}
?>
3- $layout
→ sử dụng $layout để chọn layout cho chương trình /app/views/layouts( $layout sẽ lưu tên của layout trong /app/views/layouts )
→ nếu giá trị này ko được thiết lập thì layout mặc định sẽ được sử dụng cho ứng dụng của bạn: default.ctp
ví dụ:
// Using $layout to define an alternate layout
class RecipesController extends AppController {
function quickSave() {
$this->layout = 'ajax';
}
}
?>
4- $params
→ được sử dụng để cung cấp quyền truy cập vào các thông tin về request hiện tại:
4.1- form : → $this->params['form'];
4.2- admin : → $this->params['admin'];
4.3- bare : → $this->params['bare'];
4.4- form : → $this->params['isAjax'];
→ and so on.....
V- Các method của controller
1- Tương tác với View
1.1- set( string $var, mixed $value)
chuyển dữ liệu từ controller tới view.
Ví dụ:
$this->set('title_for_layout', 'This is the page title');
?>
1.2- render
render(string $action, string $layout, string $file)
Dùng để render các view tương ứng
Ví dụ:
class RecipesController extends AppController {
function search() {
// Render the view in /views/recipes/search.ctp
$this->render();
}
}
2- Flow control
2.1- redirect
redirect(mixed $url, integer $status, boolean $exit)
ví dụ:
function placeOrder() {
//Logic for finalizing order goes here
if($success) {
$this->redirect(array('controller' => 'orders', 'action' => 'thanks'));
} else {
$this->redirect(array('controller' => 'orders', 'action' => 'confirm'));
}
}
2.2- flash
flash(string $message, string $url, integer $pause, string $layout)
được dùng để redirect đến 1 trang. Phương pháp này khác với phương pháp redirect() ở chỗ là nó hiển thị 1 message trước khi chuyển tới 1 url khác
3- Callbacks
3.1- beforeFilter()
được thực thi trước mỗi action của controller
3.2- beforeRender()
được thực thi sau mỗi action của controller( nhưng trước khi view được gọi )
3.3- afterFilter()
được gọi sau mỗi action và sau rendering được hoàn tất
3.4- Các callback trong scaffold
_beforeScaffold($method)
_afterScaffoldSave($method)
afterScaffoldSaveError($method)
_scaffoldError($method)
4- Một số phương thức khác
- constructClasses(), referer(), disableCache(), postConditions(), paginate(), requestAction(), loadModel().