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
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!
hola, saludos, excelente articulo, tienes algun link , tutorial o ayuda de como instalar yii2 sin composer, solo bajando el .rar desde la pagina web y colocandolo en www.
saludos !
Hola Miguel
Es muy sencillo instalar yii sin utilizar composer, ya que solamente debes de descargar el framework desde esta url http://www.yiiframework.com/download/#yii2 en cualquiera de sus 2 versiones (basic o advanced).. que por cierto no conozco muy bien cuales son las diferencias .. y una vez en tu equipo debes extraer la carpeta compacta en alguna ruta de tu disco, crear un enlace simbólico en la carpeta web de tu servidor y listo .. la carpeta web como menciono en el artículo es básicamente la vista de la aplicación.
Digo, brevemente descrito de esa forma seguramente lograrás poner en marcha la plantilla de desarrollo de Yii2.
Saludos
hola Jackfiallos, saludos, gracias por responder, correcto, lo descargue, la coloque con el nombre de yii2 en la carpeta htdocs de mi XAMPP. pero después de allí no he sabido como acceder al gii , o a una demostración de ejemplo.
seguiré intentando, pero si tienes algun link o tutorial a la mano , estaría muy agradecido
Hola Miguel, espero que esto te sirva
http://qbit.com.mx/blog/2015/01/28/poniendo-en-marcha-yii2-en-windows/
Saludos
Hola, gracias por el articulo, de casualidad tendrás un buen tutorial de Yii 1, necesito usar CDbCriteria y no e encontrado mucha infromación
Hola Iveth, lástima que no tenga nada de CDbCriteria porque según yo está todo muy claro en la documentación de Yii, pero que necesitas conocer específicamente, quizás podría ayudarte!
listo , todo solucionado , mil gracias ! yii2 funcionando…
una pregunta adicional , , , si deseo iniciar un proyecto1 y luego un proyecto2 ,,, ,y luego un proyecto 3, tendria que realizar los pasos de ejecutar via consola init.bat y yii.bat desde la carpeta proyecto1 o proyecto 2 respectivamente ? o como seria el procedimiento…saludos y gracias
no estoy seguro, aunque por lo visto si se debe de crear la misma estructura para cada proyecto, ya que ahora el framework queda dentro de los proyectos y definitivamente no es muy buena opción si se tienen muchos proyectos en el mismo servidor y todos con una copia del framework, aunque en linux para eso existen los enlaces simbólicos 😛 ..
Saludos
Hola tu crees que es bueno usar yii 2 en un proyecto para liberar en 2 meses. Mi temor principal es la documentación. Se un poco de yii 1 por que en el pasado hice un proyecto en esta versión Pero la verdad es que encontraba todo lo que necesitaba muy fácil y con mucha ayuda en los foros. Sin embargo en yii 2 veo que la guía definitiva tiene secciones en construcción y no se si para hacer algo me sirve las mismas guías del yii 1. Me da miedo quedarme atascado en alguna parte por no conseguir soporte y también que tan estable sea la nueva versión.
Hola Luis, que difícil decisión tienes sobre ti, pero a muchos nos está pasando lo mismo y yo incluso me he hecho la misma pregunta en los últimos días y dependiendo del tiempo y del tamaño del proyecto es que tomo diferentes versiones. Creo que deberías seguir utilizando la versión 1 del framework, hace algún tiempo atrás leía que yii 1 se seguirá desarrollando un par de años más y se le dará mantenimiento hasta el 2018, quizás para ese entonces se llegue a la versión x.18.. Aunque pienso que lo mejor es que sigas utilizando la versión q mejor dominas, más que todo por la premisa de tiempo que traes.
La nueva versión de Yii viene con muchas mejoras, la mayoría de ellas tratan sobre estructuras de programación que han sido introducidas a PHP para mejorar el lenguaje, mismas que si no te hacen sentir a gusto o no las conoces todas, por obvias razones tardarás más tiempo en tu desarrollo porque aparte de aprender a usar el nuevo framework, deberás mejorar tu estilo de programación.
Hola Estimado,
también he estado probando la versión 2 de Yii según veo tu instalaste la plantilla básica existe una plantilla avanzada, que trae algunas otras ventajas entre ellas que trae una parte front-end y otra back-end ademas de traer un sistema de usuarios totalmente funcional.
podrías probar y hacer un articulo de esta segunda versión.
Ademas de encontrar estas ventajas, encuentras que tiene alguna desventaja? por mi lado creo que la curva de aprendizaje a crecido y para mi gusto esta era una de las cosas que diferenciaba a Yii de algunos framework php.
Freddy
Fijate que hace algún tiempo, cuando salía esta nueva versión de Yii, probé ambas platillas.. la basica para hacer un ejercicio rápido y la advanced para crear una api .. sorprendentemente y para mi gusto, hacer el api con las funciones básicas del crud fue súper sencillo y agregar nuevos métodos también.. me gustó mucho, creo q se merece escribir un poco sobre el tema. Sobre el framework en versión 2 ha cambiado bastante y hay q volver a aprenderlo a utilizar, como dices.. la curva de aprendizaje es un poco mayor debido a que php también ha cambiado, el uso de namespaces, composer, eventos y más, algo q dejo pendiente es q no sé si las anteriores extensiones funcionan en esta nueva versión y el como se hace wrapper de librerías de terceros.
Saludos
Hola Jack excelente tu documentacion, creo que si alguien se molesto en actualizar este framework habria que usarlo, una pregunta, si alguien ya conoce el Yii como tu, que tan dificil es aprender a usar el Yii 2?? saludos.
Hola Herbert, fíjate que aprender Yii 2 es un poco más complejo, más que todo por las configuraciones iniciales, pero dejando eso a un lado, si lograste comprender o adaptarte a Yii 1, sin problemas en un par de días volarás con la nueva versión. Lo único que no he encontrado es si ya se recomienda utilizar para proyectos productivos.
Saludos
Gran artículo! Felicidades por el sitio que aporta valiosos consejos en este sentido!
Gracias Gustavo, esa es la idea de nuestro blog 🙂 Saludos
Saludos, excelente artículo. Por ahora tengo duda para configurar yii2 para realizar web services, pero no he podido configurarlo. Te pido por favor, si sabes como hacerlo, puedas ayudarme!!.
Hola Jesús, yo he utilizado este How to “http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html” y no recuerdo haber tenido problemas, tu lo seguiste también ?
Hola,
Muy buena información la que leí en el articulo y comentarios; me quedo con la pregunta sobre si es recomendable utilizar Yii2 para proyectos productivos; no lo se todavía.
Que opinan?
Hola emartz, definitivamente Yii2 se puede utilizar para proyectos en producción, incluso recuerdo haber leído sobre empresas grandes que le están dando la oportunidad al framework.. digo, hasta yo lo tengo en un proyecto productivo y funciona bastante estable, más de lo q esperaba.
Saludos
hola ,saludos , has detallado como es la estructura de yii2 con modelos, vistas y controladores ? me gudstaria crear una carpeta 1 de nombre PROYECTO1 y dentro de ella tenga la carpeta model , views y controller, ya que luego necesito crear una carpeta 2 de nombre PROYECTO2 con todo dentro de ella, que opinas y como has visto esto en yii2 con GII ?, saludos cordiales
Tanto la estructura como el Gii es muy similar a la versión 1, a que te refieres 🙂