Aplicaciones de Consola
Las aplicaciones de consola ahora están organizadas como controladores, como una aplicación web. Los controladores de consola se extienden yii\console\Controller, similar a CConsoleCommand de la versión 1.Para ejecutar un comando de consola se utiliza yii <route>, where <route> es la ruta de un controlador (ejemplo: sitemap/index)
I18N
Yii 2 deja de lado todo el formato de fechas y números incorporados en favor del paquete PECL intl PHP.La traducción de mensajes ahora se realiza a través del componente i18n. Este componente administra un conjunto de mensajes fuente, que permite usar diferentes mensajes distribuidos en categorías.
Filtros de Acción
Los filtros de acción (los filtros que definíamos en el controlador), ahora se implementan a través de los comportamientos (behaviors). Para definir uno nuevo, se extiende de yii\base\ActionFilter. Por ejemplo, para utilizar el filtro yii\filters\AccessControl se debe escribir el siguiente código en un controlador.public function behaviors()
{
return [
'access' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
['allow' => true, 'actions' => ['admin'], 'roles' => ['@']],
],
],
];
}
Assets
Yii 2 introduce un nuevo concepto llamado asset bundle que reemplaza el concepto de paquetes de script de la versión 1.Un asset bundle es un conjunto de archivos (por ejemplo: archivos JavaScript, hojas de estilo CSS, imágenes) dentro de un directorio. Cada asset bundle se representa como una clase que se extiende de yii\web\AssetBundle. Se registra vía yii\web\AssetBundle::register().
Helpers
Yii 2 introduce algunas de las clases helper (asistentes) comúnmente utilizadas, incluyendo:- yii\helpers\Html
- yii\helpers\ArrayHelper
- yii\helpers\StringHelper
- yii\helpers\FileHelper
- yii\helpers\Json
Formularios
Yii 2 introduce el concepto de field (campo) para construir un formulario utilizando yii\widgets\ActiveForm. Un field es un contenedor compuesto de una etiqueta, una entrada, un mensaje de error y/o un texto de indicio (hint). Un formulario se puede construir más limpiamente, algo similar a:<?php $form = yii\widgets\ActiveForm::begin(); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login') ?>
</div>
<?php yii\widgets\ActiveForm::end(); ?>
Query Builder (Constructor de Consultas)
En la versión 1 utilizábamos una serie de clases para construir nuestras sentencias, que incluía el uso de CDbCommand, CDbCriteria, y CDbCommandBuilder. Yii 2 representa una consulta en términos de un objeto Query. Por ejemplo:$query = new \yii\db\Query();
$query->select('id, name')
->from('user')
->limit(10);
$command = $query->createCommand();
$sql = $command->sql;
$rows = $command->queryAll();
Active Record (Registro Activo)
Yii 2 introduce muchos cambios a nivel del Registro Activo. Los más obvios es el Query Builder y el manejo de consultas relacionadas. En la versión 1 la clase utilizada era CDbCriteria. En ésta nueva versión se utiliza yii\db\ActiveQuery la cual es una extensión de yii\db\Query. Una consulta sería:$customers = Customer::find()
->where(['status' => $active])
->orderBy('id')
->all();
Para declarar una relación, se define un método que retorne un objeto tipo ActiveQuery . Por ejemplo:
class Customer extends \yii\db\ActiveRecord{
public function getOrders()
{
return $this->hasMany('Order', ['customer_id' => 'id']);
}
}
De esta manera se puede utilizar $customer->orders para acceder a las órdenes de compra de un cliente. También se puede usar el siguiente código para realizar una consulta relacionada condicionada:
$orders = $customer->getOrders()->andWhere('status=1')->all();
En general, la manera de ejecutar las consultas no es muy diferente, aunque en Yii 2 se optimiza la manera de obtener los resultados con el fin de reducir significativamente el tiempo de CPU y la memoria, especialmente con una gran cantidad de registros, como por ejemplo al ejecutar:
$customers = Customer::find()->asArray()->all();
Otro cambio es que no se puede definir un valor por defecto de los atributos a través de las propiedades públicas. Para poder realizar ésto, se lo debe hacer en el método init.
public function init()
{
parent::init();
$this->status = self::STATUS_NEW;
}
Algunos problemas de la versión 1 al sobreescribir el constructor ya no se encuentran en la versión 2. Otros cambios y mejoras se las verá en entradas posteriores.
Active Record Behaviors (Comportamiento del Registro Activo)
La clase CActiveRecordBehavior ha sido eliminada en la versión 2. Para crear un Active Record Behavior, hay que extenderlo directamente de yii\base\Behavior. Si el behavior necesita responder a un evento en particular, hay que sobreescribir el método events(). Por ejemplo:namespace app\components;
use yii\db\ActiveRecord;
use yii\base\Behavior;
class MyBehavior extends Behavior{
// ...
public function events()
{
return [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
];
}
public function beforeValidate($event)
{
// ...
}
}
Usuarios e Interfaces de Identidad
La clase CWebUser utilizada en la versión 1, es reemplazada por yii\web\User, y ya no hay la clase CUserIdentity. Ahora se debe implementar yii\web\IdentityInterface que es mucho más sencillo de usar. Las plantillas proveen un ejemplo, aunque conforme avancemos en la revisión de ésta versión, en las entradas se irá viendo acerca de Autentificación, Autorización y Técnicas de Aplicaciones Avanzadas.Administración de URL
El administrador de URLs de la versión 2 es similar al de la versión 1. Una mejora es que ahora soporta parámetros. Por ejemplo, se puede tener una regla que hace coincidir post/popular con post/1/popular. En la versión 1 se requiere de dos reglas para este objetivo, mientras que en la nueva versión quedaría algo como lo siguiente:[
'pattern' => 'post/<page:\d+>/<tag>',
'route' => 'post/index',
'defaults' => ['page' => 1],
]
También te puede interesar:
Actualizando Yii desde la versión 1 (Parte I)
No hay comentarios.:
Publicar un comentario
Nota: sólo los miembros de este blog pueden publicar comentarios.