Un comportamiento es en la que extrae el código que en realidad no pertenece a un dominio específico de los modelos. Tipo de funciones similares, auxiliares o mixin/module (si está familiarizado con ese patrón de otros lenguajes de programación).
Si está familiarizado con los ayudantes y componentes de CakePHP, puede verlo así. Un comportamiento es Modelar como Ayudante es Ver como Componente a Controlador. Básicamente es un conjunto de funcionalidades que se usará en múltiples modelos.
Digamos que desea implementar la eliminación suave en todos los modelos de su aplicación. (Borrado suave, no borras el registro, solo lo marcas como eliminado). No querrá poner el mismo código de eliminación suave en cada modelo. ¡Eso no es muy seco! En su lugar, utiliza un comportamiento para abstraer la funcionalidad como tal.
Lo que estamos tratando de hacer es en lugar de eliminar el registro, actualizar la columna eliminada en la fecha actual (funcionará de la misma manera que la creada, modificada). Luego, cambiaremos el método de búsqueda para recuperar solo registros que no se eliminen.
// 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;
}
}
Luego, en su modelo
Class User extends AppModel {
public $actsAs = array('SoftDeletable');
}
Y desde su controlador, puede llamar a cualquiera de nuestros métodos de comportamiento del modelo de
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
}
}
espero que esto le ayuda.
¡Excelente respuesta! ejemplo de código muy legible y comprensible! gracias. – yossi
De nada, Yossi. ¡Esperaba que no fuera demasiado largo! –
no, fue perfecto ... es por eso ... ¿pueden verificarlo? http://stackoverflow.com/questions/7278357/cakephp-creating-new-user-account-several-problems/7278402#7278402 – yossi