Contribuciones en cakephp, estas son una lista de contribuciones que trataran de explicar el uso del framework cakephp a la vez que describe ciertas nuevas funcionalidades no documentadas en otra parte.

Resolviendo un pequeño defecto en los comportamientos de CakePHP

Esta fue mi primera contribución en el frame de cakephp, en la cual me di cuenta de un bug, que existía en el modelo del nucleo.

El problema ¿que estaba pasando?

Tratare de explicar dicha contribución, verán hace un tiempo el cakephp en su modelo base tenia la siguiente instrucción en php:

if ($this->actsAs !== null || $this->actsAs !== false) {
 //...
}

Una prueba haciendo una pequeña prueba

Sí analizamos un poco nos daremos cuenta que es un análisis lógico incorrecto, por lo cual me puse en contacto con uno de los desarrolladores enviando el siguiente test:

function foo($actsAs){
    if ($actsAs !== null || $actsAs !== false) {
                echo "always runs!\n";
    }else
        var_dump($actsAs);
}

foo(false);
foo(null);
foo(
    array('Translate', 'MyBehavior' => array('setting1' => 'value1'))
);
foo('other mensaje');

Verán definí la función foo la cual es simplemente una función de prueba para testar la instrucción lógica de la forma: if ($this->actsAs !== null || $this->actsAs !== false), el resultado del script es el siguiente:

always runs!
always runs!
always runs!
always runs!

¿Como se resolvió? y ¿tu que solución darías?

Bien basicamente propuse las siguientes 3 soluciones:

1. Cambiar la estructura de la comparación lógica por la siguiente

    if ($this->actsAs !== null && $this->actsAs !== false)

2. Revisar si $this->actsAs no es vacio

    if (!empty($this->actsAs))

3.Eliminar la comparación y simplemente ejecutar la acción defecto

    $merge = array('findMethods','actsAs');
    /*if ($this->actsAs !== null || $this->actsAs !== false) {
            $merge[] = 'actsAs';
    }*/

 

¿Tu cual crees que es la mejor solución?, para mayor información sobre la solicitud de cambios puede ver los detalles en:

https://github.com/cakephp/cakephp/pull/357

 

P.d. Agradezco a la comunidad de cakePHP y en especial a Markstory por portarse tan amables con un novato que apenas hacia su 1ra confirmación.