Table Of ContentGu´ıa Definitiva de Yii 2.0
http://www.yiiframework.com/doc/guide
Qiang Xue,
Alexander Makarov,
Carsten Brandt,
Klimov Paul,
and
many contributors from the Yii community
Espan˜ol translation provided by:
Antonio Ramirez,
Daniel Go´mez Pan,
Enrique Mat´ıas Sa´nchez (Quique),
’larnu’,
Luciano Baraglia
This tutorial is released under the Terms of Yii Documentation.
Copyright 2014 Yii Software LLC. All Rights Reserved.
´
Indice general
1. Introducci´on 1
1.1. ¿Qu´e es Yii? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Actualizar desde Yii 1.1 . . . . . . . . . . . . . . . . . . . . . 3
2. Primeros pasos 15
2.1. Qu´e necesita saber . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2. Instalar Yii . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3. Corriendo Aplicaciones . . . . . . . . . . . . . . . . . . . . . . 22
2.4. Diciendo Hola . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5. Trabajando con Formularios . . . . . . . . . . . . . . . . . . . 29
2.6. Trabajar con Bases de Datos . . . . . . . . . . . . . . . . . . 35
2.7. Generando C´odigo con Gii . . . . . . . . . . . . . . . . . . . . 41
2.8. Mirando Hacia Adelante . . . . . . . . . . . . . . . . . . . . . 47
3. Estructura de una aplicaci´on 49
3.1. Informaci´on general . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2. Scripts de Entrada . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.4. Componentes de la Aplicacio´n . . . . . . . . . . . . . . . . . . 64
3.5. Controladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.6. Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.7. Vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.8. Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.9. Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.10.Mo´dulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.11.Assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.12.Extensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
4. Gesti´on de las peticiones 147
4.1. Informaci´on General . . . . . . . . . . . . . . . . . . . . . . . 147
4.2. Bootstrapping . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
4.3. Enrutamiento y Creacio´n de URLS . . . . . . . . . . . . . . . 149
4.4. Peticiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
iii
iv ´INDICE GENERAL
4.5. Respuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
4.6. Sesiones (Sessions) y Cookies . . . . . . . . . . . . . . . . . . 172
4.7. Gestio´n de Errores . . . . . . . . . . . . . . . . . . . . . . . . 179
4.8. Registro de anotaciones . . . . . . . . . . . . . . . . . . . . . 184
5. Conceptos clave 193
5.1. Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
5.2. Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
5.3. Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
5.4. Comportamientos . . . . . . . . . . . . . . . . . . . . . . . . . 203
5.5. Configuraci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
5.6. Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
5.7. Autocarga de clases. . . . . . . . . . . . . . . . . . . . . . . . 218
5.8. Localizador de Servicios . . . . . . . . . . . . . . . . . . . . . 220
5.9. Contenedor de Inyecci´on de Dependencias . . . . . . . . . . . 222
6. Trabajar con bases de datos 229
6.1. Objetos de Acceso a Bases de Datos . . . . . . . . . . . . . . 229
6.2. Constructor de Consultas . . . . . . . . . . . . . . . . . . . . 242
6.3. Migracio´n de Base de Datos . . . . . . . . . . . . . . . . . . . 253
7. Obtener datos de los usuarios 277
7.1. Validacio´n de Entrada . . . . . . . . . . . . . . . . . . . . . . 279
7.2. Subir Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . 293
7.3. Obtencio´n de datos para los modelos de mu´ltiples . . . . . . . 299
8. Visualizar datos 301
8.1. Paginaci´on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
8.2. Proveedores de datos . . . . . . . . . . . . . . . . . . . . . . . 306
8.3. Widgets de datos . . . . . . . . . . . . . . . . . . . . . . . . . 314
8.4. Trabajar con Scripts del Cliente . . . . . . . . . . . . . . . . . 318
8.5. Temas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
9. Seguridad 323
9.1. Autorizaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.2. Trabajar con Passwords . . . . . . . . . . . . . . . . . . . . . 340
10.Cach´e 345
10.1.El Almacenamiento en Cach´e . . . . . . . . . . . . . . . . . . 345
10.2.Almacenamiento de Datos en Cach´e . . . . . . . . . . . . . . 345
10.3.Cach´e de Fragmentos . . . . . . . . . . . . . . . . . . . . . . . 354
10.4.Cach´e de Pa´ginas . . . . . . . . . . . . . . . . . . . . . . . . . 358
10.5.Cach´e HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
´INDICE GENERAL v
11.Servicios Web RESTful 363
11.1.Gu´ıa Breve . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
11.2.Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
11.3.Controladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
11.4.Enrutamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
11.5.Formato de Respuesta . . . . . . . . . . . . . . . . . . . . . . 377
11.6.Autenticacio´n . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
11.7.Limitando el rango (rate) . . . . . . . . . . . . . . . . . . . . 383
11.8.Versionado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
11.9.Manejo de errores . . . . . . . . . . . . . . . . . . . . . . . . . 387
12.Herramientas de Desarrollo 391
13.Pruebas 395
13.1.Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
13.2.Preparaci´on del entorno de pruebas . . . . . . . . . . . . . . . 397
13.3.Pruebas unitarias . . . . . . . . . . . . . . . . . . . . . . . . . 397
13.4.Tests funcionales . . . . . . . . . . . . . . . . . . . . . . . . . 398
13.5.Tests de aceptaci´on . . . . . . . . . . . . . . . . . . . . . . . . 399
13.6.Fixtures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
13.7.Administrar Fixtures . . . . . . . . . . . . . . . . . . . . . . . 405
14.Temas especiales 409
14.1.Crear tu propia estructura de Aplicaci´on . . . . . . . . . . . . 411
14.2.Validadores del framework . . . . . . . . . . . . . . . . . . . . 414
14.3.Env´ıo de Emails . . . . . . . . . . . . . . . . . . . . . . . . . 427
14.4.Usar motores de plantillas . . . . . . . . . . . . . . . . . . . . 434
14.5.Trabajar con co´digo de terceros . . . . . . . . . . . . . . . . . 435
15.Widgets 441
16.Clases auxiliares 443
16.1.Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
16.2.ArrayHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
16.3.Clase auxiliar Html (Html helper) . . . . . . . . . . . . . . . 452
16.4.Clase Auxiliar URL (URL Helper) . . . . . . . . . . . . . . . 459
vi ´INDICE GENERAL
Cap´ıtulo 1
Introducci´on
1.1. ¿Qu´e es Yii?
YiiesunframeworkdePHPdealtorendimiento,basadoencomponentes
para desarrollar aplicaciones web modernas en poco tiempo. El nombre Yii
significa “simple y evolutivo” en chino. Tambi´en se puede considerar como el
acr´onimo de Yes It Is (que en ingl´es significa S´ı, lo es)!
1.1.1. ¿En qu´e es mejor Yii?
Yiiesunframeworkgen´ericodeprogramaci´onweb,loquesignificaquese
puedeutilizarparadesarrollartodotipodeaplicacioneswebenPHP.Debido
asuarquitecturabasadaencomponentesyasusofisticadacompatibilidadde
cach´e, es especialmente apropiado para el desarrollo de aplicaciones de gran
envergadura, como pa´ginas web, foros, sistemas de gesti´on de contenidos
(CMS), proyectos de comercio electr´onico, servicios web compatibles con la
arquitectura REST y muchos m´as.
1.1.2. ¿C´omo se compara Yii con otros frameworks?
Si est´as ya familiarizado con otros framework, puedes apreciar como se
compara Yii con ellos:
Comolamayor´ıadelosframeworkdePHP,Yiiimplementaelpatr´onde
disen˜o MVC (Modelo-Vista-Controlador) y promueve la organizacio´n
de c´odigo basada en este patro´n.
La filosof´ıa de Yii consiste en escribir el c´odigo de manera simple y
elegante, sin sobredisen˜ar nunca por el mero hecho de seguir un patr´on
de disen˜o determinado.
Yii es un framework completo (full stack) que provee muchas carac-
ter´ısticas probadas y listas para usar, como los constructores de con-
sultas y la clase ActiveRecord para las bases de datos relacionales y
1
2 CAP´ITULO 1. INTRODUCCIO´N
NoSQL, la compatibilidad con la arquitectura REST para desarrollar
API, la compatibilidad de cach´e en varios niveles y muchas m´as.
Yii es extremadamente extensible. Puedes personalizar o reemplazar
pr´acticamente cualquier pieza de c´odigo de base, como se puede tam-
bi´en aprovechar su s´olida arquitectura de extensiones para utilizar o
desarrollar extensiones distribuibles.
El alto rendimiento es siempre la meta principal de Yii.
Yiinoesunproyectodeunsolapersona,detr´asdeYiihayuns´olidoequipode
desarrollo1, as´ı como una gran comunidad en la que numerosos profesionales
contribuyen constantemente a su desarrollo. El equipo de desarrollo de Yii
se mantiene atento a las u´ltimas tendencias de desarrollo web, as´ı como
a las mejores pr´acticas y caracter´ısticas de otros frameworks y proyectos.
Las buenas pra´cticas y caracter´ısticas ma´s relevantes de otros proyectos se
incorporan regularmente a la base del framework y se exponen a trav´es de
interfaces simples y elegantes.
1.1.3. Versiones de Yii
Actualmente existen dos versiones principales de Yii: la versi´on 1.1 y la
versi´on2.0.Paralaversio´n1.1,queesdelageneraci´onanterior,actualmente
solo se ofrece mantenimiento. La versio´n 2.0 est´a completamente reescrita
y adopta las u´ltimas tecnolog´ıas y protocolos, incluidos Composer, PSR,
namespaces, traits, etc. La versi´on 2.0 representa la actual generaci´on del
framework y su desarrollo recibira´ el principal esfuerzo en los pr´oximos an˜os.
Esta gu´ıa esta´ basada principalmente en la versi´on 2.0. del framework.
1.1.4. Requisitos y Prerequisitos
Yii 2.0 requiere PHP 5.4.0 o una versi´on posterior y corre de mejor ma-
nera en la u´ltima versi´on de PHP. Se pueden encontrar requisitos m´as de-
tallados de caracter´ısticas individuales ejecutando el script de comprobaci´on
incluido en cada lanzamiento de Yii.
Para utilizar Yii se requieren conocimientos b´asicos de programaci´on
orientada a objetos (POO), porque el framework Yii se basa ´ıntegramente
en esta tecnolog´ıa. Yii 2.0 hace uso tambi´en de las u´ltimas caracter´ısticas de
PHP, como namespaces2 y traits3. Comprender estos conceptos te ayudar´a
a entender mejor Yii 2.0.
1https://www.yiiframework.com/team/
2https://www.php.net/manual/es/language.namespaces.php
3https://www.php.net/manual/es/language.oop5.traits.php
1.2. ACTUALIZAR DESDE YII 1.1 3
1.2. Actualizar desde Yii 1.1
Existen muchas diferencias entre las versiones 1.1 y 2.0 de Yii ya que el
framework fue completamente reescrito en su segunda versi´on. Como resul-
tado, actualizar desde la versi´on 1.1 no es tan trivial como actualizar entre
versionesmenores.Enestagu´ıaencontrar´aslasdiferenciasm´asgrandesentre
estas dos versiones.
Si no has utilizado Yii 1.1 antes, puedes saltarte con seguridad esta sec-
ci´on e ir directamente a “Comenzando con Yii“.
EsimportanteanotarqueYii2.0introducem´ascaracter´ısticasdelasque
van a ser cubiertas en este resumen. Es altamente recomendado que leas a
trav´es de toda la gu´ıa definitiva para aprender acerca de todas ellas. Hay
muchas posibilidades de que algo que hayas desarrollado anteriormente para
extender Yii, sea ahora parte del nu´cleo de la librer´ıa.
1.2.1. Instalacio´n
Yii 2.0 adopta ´ıntegramente Composer4, el administrador de paquetes
de facto de PHP. Tanto la instalaci´on del nu´cleo del framework como las
extensiones se manejan a trav´es de Composer. Por favor consulta la secci´on
Comenzando con la Aplicaci´on B´asica para aprender a instalar Yii 2.0. Si
quieres crear extensiones o transformar extensiones de Yii 1.1 para que sean
compatibles con Yii 2.0, consulta la secci´on Creando Extensiones de la gu´ıa.
1.2.2. Requerimientos de PHP
Yii 2.0 requiere PHP 5.4 o mayor, lo que es un gran progreso ya que Yii
1.1 funcionaba con PHP 5.2. Como resultado, hay muchas diferencias a nivel
del lenguaje a las que deber´ıas prestar atencio´n. Abajo hay un resumen de
los mayores cambios en relacio´n a PHP:
Namespaces5.
Funciones an´onimas6.
La sintaxis corta de Arrays [...elementos...] es utilizada en vez de
array(...elementos...).
Etiquetas cortas de echo. Ahora en las vistas se usa <?=. Esto se puede
utilizar desde PHP 5.4.
SPL - Biblioteca est´andar de PHP7.
Enlace est´atico en tiempo de ejecuci´on8.
Fecha y Hora9.
4https://getcomposer.org/
5https://www.php.net/manual/es/language.namespaces.php
6https://www.php.net/manual/es/functions.anonymous.php
7https://www.php.net/manual/es/book.spl.php
8https://www.php.net/manual/es/language.oop5.late-static-bindings.php
9https://www.php.net/manual/es/book.datetime.php
4 CAP´ITULO 1. INTRODUCCIO´N
Traits10.
intl11. Yii 2.0 utiliza la extensio´n intl de PHP como soporte para in-
ternacionalizaci´on.
1.2.3. Namespace
El cambio ma´s obvio en Yii 2.0 es el uso de namespaces. Casi todas
las clases del nu´cleo utilizan namespaces, ej., yii\web\Request. El prefijo “C”
no se utiliza m´as en los nombre de clases. El esquema de nombres sigue la
estructura de directorios. Por ejemplo, yii\web\Request indica que el archi-
vo de la clase correspondiente web/Request.php est´a bajo el directorio de Yii
framework.
(Puedes utilizar cualquier clase del nu´cleo sin necesidad de incluir el
archivo que la contiene, gracias al autoloader de Yii.)
1.2.4. Componentes y Objetos
Yii2.0partelaclaseCComponentde1.1endosclases:yii\base\BaseObject
y yii\base\Component. La clase BaseObject es una clase base que permite
definirpropiedadesdeobjectatrav´esdegettersysetters.LaclaseComponent
extiende de BaseObject y soporta eventos y comportamientos.
Si tu clase no necesita utilizar las caracter´ısticas de eventos o compor-
tamientos, puedes considerar usar BaseObject como clase base. Esto es fre-
cuente en el caso de que las clases que representan sean estructuras de datos
b´asicas.
1.2.5. Configuracio´n de objetos
La clase BaseObject introduce una manera uniforme de configurar ob-
jetos. Cualquier clase descendiente de BaseObject deber´ıa declarar su cons-
tructor (si fuera necesario) de la siguiente manera para que puede ser ade-
cuadamente configurado:
class MyClass extends \yii\base\BaseObject
{
public function __construct($param1, $param2, $config = [])
{
// ... se aplica la inicializacio´n antes de la configuracio´n
parent::__construct($config);
}
public function init()
{
parent::init();
10https://www.php.net/manual/es/language.oop5.traits.php
11https://www.php.net/manual/es/book.intl.php
Description:This tutorial is released under the Terms of Yii Documentation. Yii 2.0 requiere PHP 5.4 o mayor, lo que es un gran progreso ya que Yii . 1.2.7. Alias. Yii 2.0 extiende el uso de alias tanto para archivos/directorios como. URLs. Yii 2.0 ahora requiere que cada alias comience con el carácter @, par