domingo, 9 de noviembre de 2014

Actualizando Yii desde la versión 1 (Parte I)

Las diferencias entre las versiones 1 y 2 son algunas, ya que la versión 2 ha sido totalmente reescrita. Así que actualizar desde la versión 1 no es algo trivial.

Mi recomendación... Inicia desde cero con Yii 2!

A continuación las diferencias entre ambas versiones para que las tomes muy cuenta si definitivamente quieres migrar.

Instalación

Yii 2 es muy cercano de Composer, ya que es el administrador de paquetes de facto para PHP. La instalación del core como de las extensiones se las realiza a través de Composer.

Requerimientos de PHP

Yii 2 necesita de PHP 5.4, mientras que Yii 1 requiere de la 5.2. Las diferencias entre las versiones de PHP incluyen:

  • Namespaces o Espacios de nombres: es un conjunto de nombres en el cual todos los nombres son únicos.
  • Funciones anónimas: también conocidas como clausuras (closures), permiten la creación de funciones que no tienen un nombre especificado. Son más útiles como valor de los parámetros de llamadas de retorno.
  • Sintaxis de arreglos corta: se utiliza [...elementos...] en lugar de array(...elementos...)
  • Tags echo corto: en las vistas se utiliza <?=
  • Interfaces y clases SPL: La Biblioteca Estándar de PHP (SPL por sus siglas en inglés) es una colección de interfaces y clases que están pensadas para solucionar problemas comunes.
  • Enlace estático en tiempo de ejecución: permite hacer referencias a la clase en uso dentro de un contexto de herencia estática.
  • Fecha y hora
  • Traits: o rasgos, son un mecanismo de reutilización de código en lenguajes de herencia simple, como PHP.
  • intl: Yii 2 utiliza ésta extensión de PHP para soporte de funciones de internacionalización


Espacios de nombres

En Yii 1 se utiliza el prefijo "C" para los nombres de las clases. En Yii se utiliza la estructuras de directorios. Por ejemplo, yii\web\Request indica que la clase está en web/Request.php bajo el directorio de Yii.

Es posible utilizar cualquier clase sin ser explícitos, gracias a la clase loader de Yii.

Componentes y Objetos

Yii 2 divide la clase CComponent en dos clases:  yii\base\Object y yii\base\Component. La clase Object es una clase base más ligera que permite definir propiedades haciendo uso de getters (para obtener datos) y setters (para inicializar). La clase Component extiende Object y soporta events (eventos) y behaviors (comportamientos).

Configuración de Objetos

La clase Object introduce una manera uniforme de configurar objetos. Cualquier clase descendiente debería declarar su constructor de la siguiente manera:

class MyClass extends \yii\base\Object{
    public function __construct($param1$param2$config = [])
    {
        // ... initialization before configuration is applied

        parent::__construct($config);
    }

    public function init()
    {
        parent::init();

        // ... initialization after configuration is applied
    }
}

 Siguiendo ésta convención, para crear y configurar nuevos objetos la manera adecuada sería:

$object Yii::createObject([
    'class' => 'MyClass',
    'property1' => 'abc',
    'property2' => 'cde',
], [$param1$param2]);

Eventos

En Yii 1, los eventos se definían a través de un método con el prefijo on (por ejemplo, onBeforeSave). En Yii 2 se puede utilizar cualquier nombre de evento. Para disparar un evento se llama al método trigger():

$event = new \yii\base\Event;$component->trigger($eventName$event);
Para adjuntar un manejador a un evento, se utiliza el método on().

$component->on($eventName$handler);// To detach the handler, use:
// $component->off($eventName, $handler);

Alias de Rutas

Yii 2 extiende el uso de los alias, tanto a los directorios/archivos como a las URLs.

Vistas

El cambio más significativo en Yii 2 es acerca de la variable $this. En una vista, ya no hace referencia al controlador o widget, sino que ahora se refiere a un objeto view. El objeto view es del tipo yii\web\View que representa la parte del diseño MVC. Para acceder al controlador o widget desde la vista, se debe utilizar $this->context

Para renderizar una vista parcial dentro de otra vista se debe utilizar $this->render(), y no $this->renderPartial(). La llamada a render ahora tiene que ser explícita a través de echo. Por ejemplo:

echo $this->render('_item', ['item' => $item]);

Modelos

Yii 2 utiliza como la clase modelo base a yii\base\Model. La clase CFormModel ha sido eliminada completamente, por lo que, en Yii 2 se debe utilizar yii\base\Model para crear un modelo de formulario.

Yii 2 introduce un nuevo método llamado scenarios(), e indica qué atributos deben ser validados bajo cuáles escenarios. Por ejemplo:

public function scenarios()
{
    return [
        'backend' => ['email''role'],
        'frontend' => ['email''!role'],
    ];
}

Bajo este contexto, los campos email y role se validarán en el escenario backend; mientras que en el escenario frontend se valida email pero role no.

El método rules() aún es usado para declarar las reglas de validación.

Controladores

Yii 2 utiliza como la clase controlador base a yii\web\Controller. El impacto más sobresaliente de éste cambio es que el controlador debe retornar el contenido que se quiere renderizar. Por ejemplo:

public function actionView($id)
{
    $model = \app\models\Post::findOne($id);
    if ($model) {
        return $this->render('view', ['model' => $model]);
    } else {
        throw new \yii\web\NotFoundHttpException;
    }
}

Widgets

Yii 2 utiliza como la clase widget base a yii\base\Widget. Yii 2 utiliza una nueva sintaxis para usar widgets. Utiliza los métodos estáticos  begin(), end(), y widget(). Por ejemplo:

use yii\widgets\Menu;
use yii\widgets\ActiveForm;
// Note that you have to "echo" the result to display it
echo Menu::widget(['items' => $items]);
// Passing an array to initialize the object properties
$form ActiveForm::begin([
    'options' => ['class' => 'form-horizontal'],
    'fieldConfig' => ['inputOptions' => ['class' => 'input-xlarge']],
]);
... campos del formulario ...
ActiveForm::end();

Temas

Los temas trabajan de manera completamente en Yii 2. Están basados en un mecanismo de asignación de ruta que asigna una ruta a una vista del tema. Los temas pueden ser aplicados a cualquier vista, incluso si está renderizada fuera del contexto original de un controlador o widget.

Además, ya no existe el componente CThemeManager. En su lugar, theme es una propiedad configurable de la vista.

Otras diferencias

Con Yii 2 también se tienen diferencias con Aplicaciones de Consola, I18N, Filtros, Assets, Helpers, Formularios, Constructor de Consultas, Registro Activo, Usuarios e Interfaces de Identidad, Administración de URLs. Las demás diferencias las revisaremos en la siguiente entrada: Actualizando Yii desde la versión 1 (Parte II)




No hay comentarios.:

Publicar un comentario

Nota: sólo los miembros de este blog pueden publicar comentarios.