CakePHP: Diferenciar add o edit en beforeSave o afterSave

24/02/2008

El código que implementemos en el método afterSave o en el beforeSave se ejecutará tanto a la hora de realizar un add o un edit. Puede ser necesario diferenciar cuando se está ejecutando una u otra acción.

Ha falta de otra opción, una manera bastante limpia de hacerlo es preguntado por la existencia o no del id en los datos recibidos por las callbacks.

if (empty($this->id)){
            // Añadiendo (no modificando)
}
No Comments

Día 403

22/02/2008

Ya hablé sobre la iniciativa 403Day. Pues nada, decir que ahora tienen web y nuevos scripts y plugins para que ese día tengamos las “armas necesarias en esta batalla”.

No Comments

Hago lo que quiero, con mi pelo

18/02/2008

Lo bueno de tener una web és poder hacer lo que quieras con ella. Y eso és lo que ha hecho are en su a.css, denegar el acceso a su blog a los usuarios de IE, cada día 4 del més 3 (por aquello del 403).

Ahora uno decide si le gusta la idea y la aplica o cree que és una tontería y pasa de ella. Yo me apunto.

Por cierto, no dejéis de mirar los comentarios en menéame que ha suscitado esta idea.

1 Comment

CakePHP: Aproximación a los behaviours

15/02/2008

Mariano Iglesias dio una charla en la CakeFest‘08 sobre los behaviours. Ha puesto en su página web la presentación que utilizó para apoyarse. Una muy buena aproximación para conocer, entender y empezar con los behaviours.

Descargar PDF de la presentación (en inglés).

No Comments

CakePHP: Mostrar un elemento checkbox activado

12/02/2008

Usando el helper Form para mostar un checkbox puede que nos sea necesario mostrarlo activo ya que por defecto no lo está. Para ello en el array de parámetros del método input o checkbox le pasaremos el key checked con el value checked.

En nuestra vista pondremos:

echo $form->input('activo', array('label'=>'¿Activo?', 'checked'=>'checked'));

Más información sobre el Helper Form.

No Comments

CakePHP: Uso de beforeSave y afterSave

10/02/2008

Es interesante y útil la existencia, en el modelo, de los métodos (callback) beforeSave y afterSave para manipular los datos antes o después de que vayan a ser grabados en la Base de Datos.

Un detalle muy importante a la hora de implementarlos en nuestros modelos es que debemos retornar un true o un false según el resultado del código de nuestra función.

function beforeSave(){
     // Código ...
     return true;
}

Mirando el código de la clase model, veo que sus métodos beforeSave y afterSave retornan un true por defecto. Ahora me pregunto si en caso de que queramos retornar un true en nuestra implementación, es más correcto retornar una llamada al método padre:

return parent::beforeSave();

De esta manera nos aseguramos que si algún día estos métodos en las clases padre tienen algo más implementado que un simple return true, ese código sea ejecutado. En caso de hacer este tipo de retorno, deberemos estar pendientes de futuras versiones de CakePHP, para ver si añaden nuevo código en estas funciones base.

2 Comments

CakePHP: Poner el idioma en la URI

7/02/2008

Buscando cómo poner el idioma en el que se está navegando la web como parte de la URI, he encontrado un hilo en el google groups de CakePHP dónde explica una manera de conseguirlo.

En nuestro archivo routes.php

Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{2}'));

Luego en el controlador que queramos, preferiblemente en el app_controller, en el método beforeFilter podemos obtener ese valor de la URI, por si lo necesitamos, mediante:

$this->params['language'];
2 Comments

CakePHP: Métodos privados en el controlador

5/02/2008

En un controlador nos puede interesar tener métodos privados que no sean accesibles desde una URL. Es sencillo, el nombre del método debe empezar por el guión bajo ( _ ), por ejemplo:

function _metodoPrivado(){
           // Código del método
}
No Comments

Los hombres de verdad no navegan…

31/01/2008

Extraido de LWN, un mail que parece ser de Richard Stallman:

For personal reasons, I do not browse the web from my computer. (I also have not net connection much of the time.) To look at page I send mail to a demon which runs wget and mails the page back to me. It is very efficient use of my time, but it is slow in real time.

Y pensar que idolatré a marianitu por usar ssh + mutt para leer su correo.

1 Comment

CakePHP: Usar valores específicos en un elemento select

31/01/2008

Sucede que en algún formulario de nuestras vistas podemos necesitar un elemento HTML select con unos valores que no se obtienen de una tabla de la Base de Datos (como sucede en los formularios de alta o modificación que crea cakePHP cuando existen relaciones belongsTo, por ejemplo) y queremos especificarlos nosotros mismos.

Una manera de conseguirlo es, en el controlador:

$dia = array('Lunes' => 'Lunes', 'Martes' => 'Martes', 'Miercoles' => 'Miercoles', 'Jueves' => 'Jueves', 'Viernes' =>'Viernes', 'Sábado' => 'Sábado', 'Domingo' => 'Domingo');
$this->set(compact('dia'));

Los keys del array $dia serán los values de los options del futuro select. Y el texto que se mostrá, será el value del array. Si el key no se especifica, los values de los options serán valores númericos correlativos empezando desde el 0.

Y en la vista:

echo $form->select('dia', $dia, null, null, false);

Resultado, obtenemos un desplegable con los días de la semana:

<select name="data[Zone][dia]" id="ZoneDia">
     <option value="Lunes">Lunes</option>
     <option value="Martes">Martes</option>
     <option value="Miercoles">Miercoles</option>
     <option value="Jueves">Jueves</option>
     <option value="Viernes">Viernes</option>
     <option value="Sábado">Sábado</option>
     <option value="Domingo">Domingo</option>
</select>

Más información sobre FormHelper::select

3 Comments