Lo nuevo que trae Yii 2.0

Yii 2.0

Yii 2.0

Hace un par de años desde que empecé a utilizar Yii Framework, mi primer proyecto grande fue precisamente Celestic, el cual quedó en la versión 0.4 y dejé de actualizar, aunque lo desarrollé con la finalidad de aprender bien el framework. Elegí Yii por su facilidad al momento de instalarlo, su estructura y las pequeñas cosas que se había traído de otros frameworks me gustaba mucho, pero después de mucho uso debo decirles que me he cansado de usarlo o quizás me cansé de utilizar el lenguaje en sí, php ya se volvió aburrido para mi. Mi idea es regresar a Ruby, a Nodejs o a Python, no lo sé, cualquier lenguaje sería bueno.. pero durante pensaba que retomar fue que decidí darle un vistazo al nuevo Yii y después de un par de horas de trabajarlo, debo aceptar que tiene cosas interesantes y es lo que intentaré contarles.

Sobre la instalación

Aparte de que podemos descargar un paquete comprimido como se hacía anteriormente, ahora podemos utilizar composer (ojo, yo tengo composer configurado de forma global)

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

Una vez descargado el proyecto, podemos revisar si cumplimos con los requerimientos, abriendo nuestro browser en la url http://localhost/yii2-app-basic/requirements.php. Uno de los cambios en el framework es ahora la estructura de carpetas, que aunque sigue siendo muy parecida a la anterior, esta vez tenemos nuestro código de presentación en la carpeta web http://localhost/yii2-app-basic/web/.

Sin mucho más que hacer y configurar, una aplicación sencilla ya se ha desplegado y a partir de esto es que pueden empezar a modificar el código según sus necesidades, yo tuve un pequeño problema que decía

Invalid Configuration
yii\web\Request::cookieValidationKey must be configured with a secret key.

Y nada que no se pudiera arreglar desde el archivo de configuración ubicado en basic/config/web.php, ahí encontrarán el atributo cookieValidationKey y solamente hay que escribirle algo y listo.

yii 2.0 errors

yii 2.0 errors

La nueva estructura

Anteriormente, todos los componentes de nuestro proyecto (modelos, vistas, controladores, framework y librerías de terceros) se encontraban dentro de la carpeta protected la cual ya no existe, según he leído hicieron el cambio pensando en la seguridad, ya que anteriormente todo dependía de la configuración del archivo .htaccess, lo que suponía un gran problema de seguridad en servidores Nginx.

– assets
– commands
– config
– controller
– mail
– models
– runtime
– test
– vendor
– views
– web

Ahora la carpeta vendor contiene las librerías externas y el propio framework y todo esto es manejable desde nuestro composer.

En que ha cambiado

Yii se ha convertido en un framework orientado a objetos puro!!!, y se aprovecha de algunas de las funciones más avanzadas de PHP, incluyendo late static binding, SPL de clases e interfaces y funciones anónimas.

Todas las clases son de espacios de nombres, lo que le permite tomar ventaja de su cargador automático – PSR 4 compatible, anteriormente el autoloader recorría casi todo el proyecto según la configuración del config/main.php y cargaba todas las clases que encontraba; ahora mediante el uso de namespaces se evita esa carga y es más específico. Ahora solamente se debe de utilizar

use yii\helpers\Html;

Esto puede que tienda a confundir un poco al principio pero todo parece tener sentido, ya que ahora se está utilizando completamente las bondades de las nuevas versiones de php (5.4 en delante) y cambios como los short tags para arreglos están disponibles, también es seguro de usar short tags para echos en una sola línea sin depender de parámetros de configuración (esto no lo he confirmado).

$arr = array(1,2,3,4); //Yii 1.x
$arr = [1,2,3,4]; //Yii 2.0
 
<?php echo $someVar; ?> //Yii 1.1
<?= $someVar ?> //always safe to use in Yii 2.0

Otra pequeño cambio es que anteriormente utilizaba Yii::app() para acceder a la instancia de la aplicación y sus componentes, en cambio en Yii 2 esto cambió de una función estática a una variable estática Yii::$app lo cual ha ayudado a mejorar el rendimiento y consumo de memoria de las aplicaciones.

Talvés la clase de controllers y models han sufrido muy pocos cambios, claro que son significativos y muy buenos, pero la clase ActiveRecord definitivamente ha cambiado y se ha dejado de utilizar la clase criteria y ahora se utiliza algo llamado ActiveQuery que es una especia de lambda en el framework lo que hace que realizar consultas sea mucho más fácil de leer a como era antes.

$usuarios = Users::find()
    ->where(['is_active' => true])
    ->orderBy('id')
    ->all();

Las relaciones dejaron de existir como las conocíamos y ahora son métodos getters que retornan un objeto ActiveQuery y para atravesar las tablas intermedias es necesario utilizar la palabra via, esto aún no lo he probado y aunque en los ejemplos se ve sencillo, no me han quedado claro todos los parámetros, eh aquí un ejemplo.

public function getPosts()
{
  return $this->hasMany(Posts::className(), ['authorID' => 'id']);
}
 
public function getComments()
{
  return $this->hasMany(Comments::className(), ['ID' => 'PostID'])->via('Posts');
}
 
//If you'd only need comments you'd define it at once:
public function getComments()
{
  return $this->hasMany(Comments::className(), ['ID' => 'PostID'])
  ->viaTable(Posts::className(), ['authorID' => 'ID']);
}
 
//Querying an author with posts and comments
$activity= Authors::findOne(['fullname' => 'Arno Slatius']);
$posts = $activity->posts;
$comments = $activity->comments;

Definitivamente el framework ha evolucionado muchísimo y ha mejorado bastante, quizás será necesario aprender cosas nuevas y adquirir nuevas habilidades del lenguaje, pero seguro valdrán la pena.

Yo he intentado saltarme todas las guías y me fui directamente a la parte de RESTful que según había leído, el framework ya ha automatizado mucho esta parte y sorpresa porque si lo hicieron.

Decidí crear un API para celestic, solo que en lugar de utilizar Yii 1.x tomé el camino de su nueva versión, la verdad es que estoy bastante a gusto lo que he logrado apenas con un par de horas de uso, ya que el framework ahora tiene algo llamado rest\activeController que permite obtener CRUD de un modelo sin tener que escribir una sóla línea de código, por acá les dejo el tutorial para que lo sigan y el código de mi nuevo proyecto por si quieren aprender o colaborar.

Guía de introducción a REST con Yii
http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html

Celestic 2 – Un Project Manager para proyectos de Software
https://github.com/jackfiallos/celestic-v2

Seguro con el paso de los días iré descubriendo cosas nuevas, buenas y malas, pero este es el hecho de empezar a utilizar una nueva herramienta de desarrollo, me hizo falta comentar más cosas que entre el framework y el lenguaje seguro ustedes también aprederán.

Happy Coding!

Co-fundador de Qbit Mexhico, usuario de linux, Developer en tecnologías web.. Nicaragüense, centro en basketball, primer centro en rugby y pintor los fines de semana. Ortögrafo y ambientalista psicológico (de escritorio).. ese soy yo!

Si te ha servido compártelo y difunde nuestro blog..

Facebook Twitter LinkedIn Google+ Flickr YouTube Skype 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook2