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)




Yii Framework 2

La nueva versión de Yii, la 2, es una nueva versión totalmente reescrita de Yii en la que se ha tomado en cuenta las últimas tecnologías y protocolos que incluye, entre otras cosas:

  • Composer: es una herramienta para la gestión de dependencias en PHP. Permite declarar las librerías dependientes que necesita tu proyecto y Composer las instalará en tu proyecto por tí.
  • PSR; es una guía de estándares de programación
  • namespaces: es un conjunto de nombres en el cual todos los nombres son únicos.
  • traits: Los traits (rasgos) son un mecanismo de reutilización de código en lenguajes de herencia simple, como PHP. El objetivo de un trait es el de reducir las limitaciones propias de la herencia simple permitiendo que los desarrolladores reutilicen a voluntad conjuntos de métodos sobre varias clases independientes y pertenecientes a clases jerárquicas distintas.

La nueva versión es más acorde con las generaciones actuales de los framework. Y los esfuerzos de desarrollo se enfocarán a esta nueva versión. La versión 1 sigue en mantenimiento.

Requerimientos y requisitos previos

Yii 2 requiere de PHP 5.4.0 o superior.

Se requiere tener conocimientos de programación orientada a objetos (POO). Yii 2 hace uso de las últimas características de PHP, como son los namespaces y traits.


También te puede interesar:
Instalando Yii 2

A quién me dirijo

En este blog obviaré algunos conceptos, como por ejemplo, qué es un framework, un modelo, vista o controlador. Asumiré que temas como estos ya son conocidos.

Sea porque ya conoces de Yii, o estás empezando a utilizarlo, en este blog abordaré los temas de Yii 2 desde el inicio, como que recién nos estamos iniciando, aunque como ya lo he dicho, asumiendo que ciertos conceptos ya se los conoce.

Si eres totalmente nuevo en esto de los frameworks y PHP, te aconsejo revisar mi otro blog Yii Framework en Español.

Y algunas de las entradas que te pueden ser útiles:
Conceptos básicos
Qué es Yii

El por qué de este blog

Hace un tiempo atrás vengo utilizando Yii Framework para mis trabajos en PHP. La verdad es que con Yii he logrado realizarlos con una alta calidad técnica y funcional. Desde el punto de vista técnico, es mucho el ahorro en programación que he obtenido, enfocándome en mi proyecto como tal, y no tanto en resolver la programación.

La versión de Yii 2 estaba disponible en versión beta, pero desde el 12 de octubre de 2014 ya ha sido liberada para el uso corriente de todos nosotros.

Lo voy a comenzar a utilizar y compartir con ustedes mi experiencia. Claro está, es bienvenido todo aquel que quera compartir su conocimiento y experiencia acerca de ésta nueva versión.