Một hành vi là nơi bạn trích xuất mã mà không thực sự thuộc về một mô hình miền cụ thể. Các loại như, các hàm trợ giúp, hoặc một mixin/module (nếu bạn quen thuộc với mẫu đó từ các ngôn ngữ lập trình khác).
Nếu bạn đã quen với người trợ giúp và thành phần CakePHP, bạn có thể xem nó như thế này. Một hành vi là để mô hình như người trợ giúp là để xem như thành phần là để điều khiển. Về cơ bản, một tập hợp các chức năng sẽ được sử dụng trên nhiều mô hình.
Giả sử bạn muốn triển khai xóa mềm trên tất cả các kiểu máy trong ứng dụng của mình. (Soft xóa ý nghĩa, bạn không thực sự xóa bản ghi, bạn chỉ cần đánh dấu nó là đã xóa). Bạn sẽ không muốn đặt cùng một mã xóa mềm vào mọi mô hình. Đó không phải là rất khô! Thay vào đó bạn sử dụng một hành vi để trừu tượng hóa các chức năng như vậy.
Điều chúng tôi đang cố gắng làm thay vì xóa bản ghi, cập nhật cột đã xóa với ngày hiện tại (nó sẽ hoạt động theo cách tương tự như được tạo, sửa đổi). Sau đó, chúng tôi sẽ thay đổi phương thức tìm kiếm để chỉ truy xuất các bản ghi không bị xóa.
// models/behaviors/soft_deletable.php
class SoftDeletableBehavior extends ModelBehavior {
function setup(&$Model, $settings = array()) {
// do any setup here
}
// override the delete function (behavior methods that override model methods take precedence)
function delete(&$Model, $id = null) {
$Model->id = $id;
// save the deleted field with current date-time
if ($Model->saveField('deleted', date('Y-m-d H:i:s'))) {
return true;
}
return false;
}
function beforeFind(&$Model, $query) {
// only include records that have null deleted columns
$query['conditions']["{$Model->alias}.deleted <>"] = '';
return $query;
}
}
Sau đó, trong mô hình của bạn
Class User extends AppModel {
public $actsAs = array('SoftDeletable');
}
Và từ điều khiển của bạn, bạn có thể gọi tất cả các phương pháp hành vi của chúng tôi trên mô hình của bạn
Class UsersControllers extends AppController {
function someFunction() {
$this->User->delete(1); // soft deletes user with id of 1
$this->User->find('all'); // this will not exclude user with an id of 1
}
}
Tôi hy vọng điều này sẽ giúp bạn.
Câu trả lời hay! ví dụ mã rất dễ đọc và dễ hiểu! cảm ơn bạn. – yossi
Bạn đang chào mừng Yossi. Tôi đã hy vọng nó không quá dài! –
nope, nó đã được hoàn hảo .. đó là lý do tại sao .. bạn có thể vui lòng kiểm tra này? http://stackoverflow.com/questions/7278357/cakephp-creating-new-user-account-several-problems/7278402#7278402 – yossi