Using Zend Framework 3
A free and open-source book on ZF3 for beginners
Home
Samples
Class Reference
Contribute
This book is available in:
English
Русский
Español
Français
Português
Table of Contents
Preface
About this Book
Intended Audience
Examples and Source Code
Your Feedback
About the Author
Acknowledgments
1. Introducción a Zend Framework 3
1.1. ¿Qué es Zend Framework 3?
1.2. Una Ejemplo de un Sitio Web con PHP
1.2.1. Página Principal
1.2.2. Página de Inicio de Sesión
1.2.3. Página para Cerrar Sesión
1.2.4. Revisión del Código
1.3. Licencia
1.4. Soporte de Usuario
1.5. El código fuente del Framework
1.5.1. Estándar de Codificación
1.6. Sistemas Operativos Soportados
1.7. Requerimientos del Servidor
1.8. Seguridad
1.9. Rendimiento
1.10. Patrones de Diseño
1.11. Principales Componentes de ZF3
1.12. Diferencias con Zend Framework 2
1.12.1. Retrocompatibilidad
1.12.2. Componentes
1.12.3. Instalador de Componentes
1.12.4. Rendimiento del ServiceManager y del EventManager
1.12.5. PSR-4
1.12.6. Middleware
1.12.7. Enfoque sobre la documentación
1.13. Resumen
2. Zend Skeleton Application
2.1. Descargar Zend Skeleton Application
2.2. Estructura de Carpetas Típica
2.3. Dependencias de la Aplicación
2.4. Sitio Virtual de Apache
2.5. Abrir el Sitio Web en Nuestro Navegador Web
2.6. Crear un Proyecto en NetBeans
2.7. Hypertext Access File (.htaccess)
2.8. Bloquear el Acceso al Sitio Web por Dirección IP
2.9. Autenticación HTTP
2.10. Tener Multiples Sitios Virtuales
2.11. El Archivo Hosts
2.12. Uso Avanzado de Composer
2.12.1. Nombre de los Paquetes y Versiones
2.12.2. Instalar y Actualizar Paquetes
2.12.3. Agregar una Dependencia Nueva
2.12.4. Paquetes Virtuales
2.12.5. Composer y el Sistema de Control de Versiones
2.13. Resumen
3. Operación del Sitio Web
3.1. Clases PHP
3.2. PHP Namespaces
3.3. Interfaces PHP
3.4. La Clase Autoloading de PHP
3.4.1. La Clase «Map Autoloader»
3.4.2. El Estándar PSR-4
3.4.3. El Autoloader provisto por Composer
3.4.4. PSR-4 y Estructura de la Carpeta Fuente del Módulo
3.5. Peticiones y respuestas HTTP
3.6. El Script de Entrada al Sitio
3.7. Eventos y Ciclo de Vida de la Aplicación
3.8. Configuración de la Aplicación
3.8.1. Archivos de Configuración a Nivel de Aplicación
3.8.2. Archivos de Configuración Extra a Nivel de la Aplicación
3.8.3. Archivo de Configuración del Desarrollador a Nivel de Aplicación
3.8.4. Archivos de Configuración Extra de Desarrollo a Nivel de Aplicación
3.8.5. Archivos de Configuración a Nivel de Módulo
3.8.6. Combinando los Archivos de Configuración
3.9. Punto de Acceso al Módulo
3.10. Administrador de Servicios
3.10.1. Registrar un Servicio
3.10.2. Nombres de Servicio
3.10.3. Sobrescribir un Servicio Existente
3.10.4. Registrar Clases Invocables
3.10.5. Registrar una Fábrica
3.10.6. Registrar un Fábrica Abstracta
3.10.7. Registrar Alias de Servicios
3.10.8. Servicios Compartidos y no Compartidos
3.10.9. Configuración del Administrador de Servicios
3.11. Administrador de Complementos
3.12. Sobre el Administrador de Eventos
3.12.1. Event y MvcEvent
3.12.2. EventManager y SharedEventManager
3.13. Resumen
4. Modelo-Vista-Controlador
4.1. Obtener el Ejemplo Hello World del GitHub
4.2. Separar la Lógica del Negocio de la Presentación
4.3. Los Controladores
4.3.1. Clase Controladora Base
4.4. Recuperar los Datos desde la Petición HTTP
4.5. Recuperar las Variables GET y POST
4.6. Colocar Datos en la Respuesta HTTP
4.7. Contenedor de Variables
4.8. Expresar Condiciones de Error
4.9. Registro de los Controladores
4.9.1. Registrar una Fábrica para el Controlador
4.9.2. LazyControllerAbstractFactory
4.10. ¿Cuando Crear un Nuevo Controlador?
4.11. Complementos para el Controlador
4.11.1. Escribir Nuestro Propio Complemento para Controladores
4.12. Vistas
4.13. Ayudantes de Vista
4.14. Los Nombres de las Plantillas de vista
4.14.1. Sobrescribir el Nombre por Defecto de la Plantilla de Vista
4.15. Resolución de Vista
4.16. Desactivar la Impresión de la Vista
4.17. Estrategias para Imprimir Vistas
4.17.1. Regresar una Respuesta JSON
4.18. Páginas de Error
4.19. Modelos
4.20. Tipos de Modelo
4.20.1. Entidades
4.20.2. Repositorios
4.20.3. Objetos con Valor
4.20.4. Servicios
4.20.5. Fábricas
4.21. Determinar el Tipo de Modelo Correcto
4.22. Otros Tipos de Modelos
4.23. Controladores Flacos, Modelos Gordos y Vistas Simples
4.23.1. Controladores Flacos
4.23.2. Modelos Gordos
4.23.3. Plantillas de Vista Simple
4.24. Resumen
5. Routing
5.1. Estructura de la URL
5.2. Tipos de rutas
5.3. Combinar Tipos de Ruta
5.3.1. Simple Route Stack
5.3.2. Tree Route Stack
5.4. Configuración del Routing
5.4.1. Configurar Rutas Simples
5.4.2. Configurar Rutas Anidadas
5.4.3. Configuración por Defecto del Routing in Zend Skeleton Application
5.5. Tipo de Ruta Literal
5.6. Tipo de Ruta Segment
5.7. Tipos de Ruta Regex
5.8. Otros Tipos de Ruta
5.8.1. Hostname
5.8.2. Scheme
5.8.3. Method
5.9. Extraer Parámetros desde la Ruta
5.9.1. Recuperar la RouteMatch y el Router Object
5.10. Generar URLs a Partir de Rutas
5.10.1. Generar URL en la plantilla de Vista
5.10.1.1. Pasar Parámetros
5.10.1.2. Generar URLs Absolutas
5.10.1.3. Especificar la Query Part
5.10.2. Generar las URL en el Controlador
5.10.3. Codificación de la URL
5.11. Escribir nuestra Propia Ruta
5.11.1. RouteInterface
5.11.2. Clase Rute a la Medida
5.12. Resumen
6. Apariencia y Diseño de la Página
6.1. Sobre las Hojas de Estilo y Twitter Bootstrap
6.2. Diseño de Páginas en Zend Framework 3
6.3. Modificar la Maqueta de la Página por Defecto
6.4. Cambiar entre Maquetas
6.4.1. Colocar una Maqueta para todas las Acciones de un Controlador
6.5. Vistas Parciales
6.6. Ayudante de Vista Placeholder
6.7. Agregar Scripts a la Página Web
6.7.1. Ejemplo
6.8. Agregar las Hojas de Estilo CSS a la Página Web
6.8.1. Ejemplo
6.9. Escribir Nuestros Ayudantes de Vista
6.9.1. Menú
6.9.2. Migas de Pan
6.10. Los Modelos de Vista y la Composición de Páginas
6.11. Resumen
7. Colectar las Entradas del Usuario con Forms
7.1. Obtener el Formulario de Demostración desde GitHub
7.2. Sobre los Formularios HTML
7.2.1. Conjunto de Campos (Fieldsets)
7.2.2. Ejemplo: Formulario de "Contacto"
7.2.3. Métodos GET y POST
7.3. Estilos para Formularios HTML con Twitter Bootstrap
7.4. Instalar los componentes para formularios de ZF3
7.5. Recuperar los datos del formulario desde una acción del controlador
7.6. Los formularios y el Modelo-Vista-Controlador
7.6.1. Flujo de trabajo de un formulario típico
7.7. Un Formulario de Modelo
7.8. Elementos del Formulario
7.8.1. Agregar Elemento a un Formulario
7.8.2. Método 1: Pasar una Instancia de un Elemento
7.8.3. Método 2: Usando un Arreglo con las Especificaciones
7.9. Ejemplo: Crear el Modelo del Formulario de Contacto
7.10. Agregar Filtros al Formulario y Reglas de Validación
7.10.1. Filtros de Entrada
7.10.2. Agregar Entradas al Filtro de Entrada
7.10.2.1. Configuración del Filtro
7.10.2.2. Configuración del Validador
7.10.2.3. Añadir el Filtro de Entrada al Modelo de Formulario
7.10.3. Crear un Filtro de Entrada para el Formulario de Contacto
7.11. Usar el Formulario en una Acción de Controlador
7.11.1. Pasar los Datos del Formulario al Modelo
7.12. Presentación del Formulario
7.12.1. Preparar el Modelo de Formulario para la Impresión en la Pantalla
7.13. Ayudantes de Vista Estándares para Formularios
7.13.1. Imprimir un Elemento del Formulario
7.13.2. Imprimir los Errores de Validación del Elemento
7.13.3. Imprimir la Etiqueta del Elemento
7.13.4. Imprimir un Formuario en Columna
7.13.5. Imprimir el Formulario Completo
7.14. Ejemplo: Crear la Plantilla de Vista para el Formulario de Contacto
7.14.1. Applying the Bootstrap CSS Styles to Form
7.14.2. Aplicar Estilos a la Lista de Errores de Validación
7.14.3. Agregar las Páginas "Gracias" y "Error al enviar el mensaje"
7.14.4. Resultado
7.15. Resumen
8. Modificar los Datos de Entrada con Filtros
8.1. Sobre los Filtros
8.1.1. FilterInterface
8.2. Vista General de los Filtros Estándar
8.3. Instanciar un filtro
8.3.1. Método 1: Instanciando el filtro manualmente
8.3.2. Método 2: Construir un filtro con StaticFilter
8.3.3. Método 3: Construcción de un filtro desde un arreglo
8.4. Sobre el administrador de complementos
8.5. Comportamiento de los filtros en caso de datos de entrada incorrectos
8.6. Ejemplos del uso de los filtros
8.6.1. Filtros que transforman datos a un tipo específico
8.6.1.1. El filtro ToInt
8.6.1.2. El filtro Boolean
8.6.1.3. Filtro ToNull
8.6.1.4. El filtro DateTimeFormatter
8.6.2. Filtros que ejecutan manipulaciones sobre una ruta de archivo
8.6.2.1. El filtro BaseName
8.6.2.2. El filtro Dir
8.6.2.3. El filtro RealPath
8.6.3. Filtros que ejecutan compresión y codificación de los datos de entrada
8.6.3.1. El filtro Compress
8.6.3.2. El filtro Encrypt
8.6.4. Filtros que manipulan cadenas de caracteres
8.6.4.1. El filtro StringToLower
8.6.4.2. Filtro PregReplace
8.6.4.3. El filtro StripTags
8.6.4.4. El filtro StripNewlines
8.6.4.5. El filtro UriNormalize
8.6.5. Organizar los filtros en una cadena
8.6.6. Filtros a la medida con el filtro Callback
8.6.6.1. Ejemplo
8.7. Escribir nuestro propio filtro
8.7.1. Uso de la clase PhoneFilter
8.8. Resumen
9. Revisar los datos de entrada con validadores
9.1. Sobre los validadores
9.1.1. ValidatorInterface
9.2. Perspectiva general de los validadores estándares
9.3. Validator Behaviour in Case of Invalid or Unacceptable Data
9.4. Instanciar un validador
9.4.1. Método 1. Instanciación Manual del Validador
9.4.2. Método 2. Usar la envoltura StaticValidator
9.4.3. Método 3. Usar un arreglo de configuración
9.5. El administrador de complementos para validadores
9.6. Ejemplos de uso de validadores
9.6.1. Validadores para revisar la conformidad de un valor a un formato determinado
9.6.1.1. Validador Ip
9.6.1.2. Validador Hostname
9.6.1.3. El validador Uri
9.6.1.4. El validador Date
9.6.1.5. El validador Regex
9.6.2. Validadores para revisar si un valor numérico está en un rango dado
9.6.2.1. Validador NotEmpty
9.6.2.2. Validador Between
9.6.2.3. Validador InArray
9.6.2.4. Validador StringLength
9.6.3. Organizar los validadores en una cadena
9.6.4. Validador personalizado con el validador Callback
9.6.4.1. Ejemplo
9.7. Escribir nuestro propio validador
9.7.1. Usar la clase PhoneValidator
9.8. Usar filtros y validadores fuera del formulario
9.9. Resumen
10. Subir archivos con formularios
10.1. Sobre la subida de archivos por HTTP
10.1.1. Codificación de transferencia binaria de HTTP
10.1.2. El arreglo super-global $_FILES en PHP
10.2. Acceder a los archivos subidos con ZF3
10.3. Subida de archivos y el Modelo de Formulario de ZF3
10.4. Validar la Subida de Archivos
10.5. Filtros de archivos subidos
10.6. El contenedor InputFilter y los archivos subidos
10.6.1. FileInput
10.6.2. Ejecutar los Validadores antes que los Filtros
10.7. Acción de controlador y carga de archivos
10.8. Ejemplo: Galería de Imágenes
10.8.1. Agregar el modelo ImageForm
10.8.2. Agregar Reglas de Validación al Modelo ImageForm
10.8.3. Escribir el servicio ImageManager
10.8.4. Agregar la clase ImageController
10.8.4.1. Agregar la acción de subida y la plantilla de vista correspondiente
10.8.4.2. Agregar la Acción Index y su Correspondiente Plantilla de Vista
10.8.4.3. Agregar la acción File
10.8.4.4. Crear una fábrica para el controlador
10.8.4.5. Registrar el ImageController
10.8.4.6. Crear la ruta
10.8.5. Resultados
10.9. Resumen
11. Uso avanzado de formularios
11.1. Elementos de seguridad para formularios
11.1.1. CAPTCHA
11.1.1.1. Tipos de CAPTCHA
11.1.1.2. El elemento CAPTCHA para formularios y el ayudante de vista
11.1.1.3. Ejemplo 1: Agregar la Imagen CAPTCHA al ContactForm
11.1.1.4. Ejemplo 2: Agregar un CAPTCHA FIGlet al ContactForm
11.1.2. Prevención CSRF
11.1.2.1. Ejemplo: Agregar un elemento CSRF al formulario
11.2. Usar validación por grupos
11.3. Implementar formulario multi-pasos
11.3.1. Habilitar sesiones
11.3.2. Agregar la clase RegistrationForm
11.3.3. Agregar la clase RegistrationController
11.3.3.1. Agregar la clase RegistrationControllerFactory
11.3.4. Agregar las plantillas de vista
11.3.5. Agregar la ruta
11.3.6. Resultados
11.4. Resumen
12. Administrar la base de datos con Doctrine ORM
12.1. Usar el ejemplo Blog del GitHub
12.2. Crear una base de datos simple con MySQL
12.2.1. Creating New Database
12.2.2. Crear Tablas
12.2.3. Importar un esquema de base de datos
12.3. Integrando Doctrine ORM con Zend Framework 3
12.3.1. Instalar el Componente Doctrine Components con Composer
12.3.2. Cargar los Módulos de Integración al Arrancar la Aplicación
12.3.3. Visión General de la Configuración de Doctrine
12.3.4. Sobrescribir la Configuración por Defecto de Doctrine
12.4. Especificar los Parámetros de Conexión
12.5. Sobre las Entidades de Doctrine
12.5.1. Anotaciones
12.6. Crear Entidades
12.6.1. Agregar la Entidad Post
12.6.2. Agregar las entidades Comment y Tag
12.6.3. Especificar Relaciones entre Entidades
12.6.3.1. Uno a Muchos/Muchos a Uno
12.6.3.2. Muchos a Muchos
12.6.4. Especificar la Ubicación de las Entidad
12.7. Sobre el Administrador de Entidades
12.7.1. Repositorios de Entidades
12.8. Agregar la Página Home del Blog
12.9. Agregar una Nueva Publicación
12.9.1. Agregar el PostForm
12.9.2. Agregar el Servicio PostManager
12.9.3. Crear el Controlador de tipo Acción y la plantilla de Vista
12.10. Editar una Publicación Existente
12.10.1. Modificar el PostManager
12.10.2. Agregar una Acción en el Controlador y una Plantilla de Vista
12.11. Borrar una Publicación
12.11.1. Modificar el PostManager
12.11.2. Agregar el Controlador de Tipo Acción
12.12. Implementar la Vista Previa para la Publicación
12.12.1. Agregar el CommentForm
12.12.2. Modificar el PostManager
12.12.3. Agregar la Acción en el Controlador y la Plantilla de Vista
12.13. Implementar la Página de Administración
12.14. Implementar la Nube de Etiquetas
12.14.1. Agregar el Post Repository Hecho a la Medida
12.14.2. Calcular Etiquetas de la Nube
12.14.3. Modificar la Acción en el Controlador
12.14.4. Imprimir la Nube de Etiquetas
12.15. Implementar Paginación
12.15.1. El Paginador de Doctrine ORM
12.15.2. El Paginador de ZF3
12.15.2.1. Modificar el PostRepository
12.15.2.2. Modificar el IndexController
12.15.2.3. Visualizar el Widget de Paginación
12.15.2.4. Resultados
12.16. Resumen
13. Migraciones de Base de Datos
13.1. Instalar el Componente Doctrine\Migrations
13.2. Configurar las Migraciones
13.3. Crear Migraciones
13.3.1. Crear la Primera Migración
13.3.2. Agregar otra Migración
13.4. Ejecutar las Migraciones
13.5. Resumen
14. Crear un nuevo módulo
14.1. ¿Cuando crear un nuevo módulo?
14.2. ¿Como creer un nuevo módulo?
14.2.1. Renombrar la carpeta del esqueleto de aplicación
14.2.2. Habilitar la clase autocargador
14.2.3. Habilitar el módulo
14.3. Archivo Module.php y escucha de eventos
14.3.1. Ejemplo 1. Cambiar la maqueta de plantilla
14.3.2. Ejemplo 2. Forzar el uso con HTTPS
14.3.3. Ejemplo 3. Reportar todas las excepciones de nuestro sitio web
14.4. Registrar el módulo como un paquete de composer
14.5. Resumen
15. Trabajar con sesiones
15.1. Sesiones de PHP
15.2. Instalar el componente Zend\Session
15.3. El manejador de sesiones
15.3.1. Establecer una configuración de sesión
15.3.2. Hacer al manejador de sesiones predeterminado
15.4. Contenedores de sesión
15.4.1. Método 1. Instanciación manual de un contenedor de sesiones
15.4.2. Método 2. Crear un contenedor de sesiones usando una factory
15.4.3. Guardar la información en una sesión con el contenedor de sesión
15.5. Resumen
16. Manejo de usuarios, autenticación y filtrado de acceso
16.1. Obtener el ejemplo de demostración de usuario desde GitHub
16.2. Crear el módulo del usuario
16.3. Configurar la base de datos
16.4. Implementar una entidad
16.5. Agregar el UserController
16.6. Agregar el Servicio UserManager
16.6.1. Crear un nuevo usuario y guardar su contraseña encriptada
16.6.2. Validar la contraseña encriptada
16.6.3. Crear el usuario administrador
16.6.4. Reiniciar la contraseña
16.7. Implementar la autenticación del usuario
16.7.1. AuthenticationService
16.7.2. Escribir el adaptador de autenticación
16.7.3. Crear la Factory para el AuthenticationService
16.7.4. Agregar AuthController
16.7.5. Agregar la plantilla a la página de inicio de sesión
16.7.6. Agregar el servicio AuthManager
16.8. Filtro de acceso
16.8.1. Agregar el listener event dispatch
16.8.2. Implementar el algoritmo de control de acceso
16.8.3. Probar el filtro de acceso
16.9. Identity Controller Plugin y el View Helper
16.10. Resumen
17. Role-Based Access Control
17.1. Obtener el ejemplo de gestión de roles del GitHub
17.2. Introducción a RBAC
17.2.1. Roles y permisos
17.2.2. Contenedor RBAC
17.2.3. Revisar permisos
17.3. Default Roles in the Role Demo Sample
17.4. Introducción a las aserciones dinámicas
17.5. Setting Up the Database
17.6. Implementar las entidades
17.7. Implementar el administrador de roles
17.8. Implementar el administrador de permisos
17.9. Asignar roles a un usuario
17.10. Implementar el RbacManager
17.10.1. Configurar la caché
17.10.2. Escribir el servicio RbacManager
17.11. Agregar la página «No está autorizado»
17.12. Modifying the AuthManager Service
17.13. Modificar el escucha de eventos Dispatch
17.14. Agregar el complemento de controlador y un ayudante de vista
Access
17.14.1. Complemento de controlador
Access
17.14.2. Ayudante de vista
Access
17.15. Using the User Module
17.16. Resumen
Apéndice A. Configurar el Entorno de Desarrollo Web
Instalar Apache, PHP and MySQL en GNU/Linux
Instalar Apache y PHP
Revisar la Instalación del Servidor Web
Editar la Configuración de PHP
Reiniciar el Servidor Web Apache
Habilitar el Módulo mod_rewrite
Crear un Servidor Virtual en Apache
Installing XDebug PHP extension
Instalar el Servidor de Base de Datos MySQL
Configuring the MySQL Database Server
Installing Apache, PHP and MySQL in Windows
Checking Web Server Installation
Enabling Apache's mod_rewrite module
Creating Apache Virtual Host
Installing XDebug PHP extension
Configuring the MySQL Database Server
Installing NetBeans IDE in Linux
Installing NetBeans IDE in Windows
Summary
Apéndice B. Introducción al Desarrollo PHP con NetBeans IDE
Configuración
Ejecutar el Sitio Web
Detección de Errores con NetBeans
Barra de Detección de Fallos «Debug Toolbar»
Puntos de Control («Breakpoints»)
Examinar Variables
Pila de Llamadas
Opciones de Detección de Fallas
Análisis de Rendimiento
Resumen
Apéndice C. Introducción a Twitter Bootstrap
Perspectiva general de los archivos de bootstrap
Sistema de rejilla
Definir la Rejilla
Compensación de Columnas
Rejillas Anidadas
"Mobile First" Concept
Componentes de Bootstrap para interfaces
Barra de Navegación
Menú Desplegable
Barra de Navegación Plegable
Barra de Navegación con Estilo Inverso
Migas de Pan
Paginación
Botones y Glyphicons
Customizing Bootstrap
Resumen
Apéndice D. Introducción a Doctrine
Doctrine y la Administración de la Base de Datos
Bases de Datos Relacionales
SQL vs. DQL
Base de Datos NoSQL
Bases de Datos Documentales
La Arquitectura de Doctrine
Componentes para las Bases de Datos Relacionales
Componentes para las Bases de Datos Documentales NoSQL
Resumen
Appendix E. Installing a ZF3 Web Application to Amazon EC2
What is Amazon Web Services?
Creating Amazon Web Services Account
Creating a Key Pair
Launching EC2 Linux Instance
Step 1 – Choose an Amazon Machine Image (AMI)
Step 2 — Choose an Instance Type
Step 3 — Configure Instance
Step 4 — Add Storage
Step 5 — Tag Instance
Step 6 — Security Group
Step 7 — Review Instance Launch
Assigning an IP Address to the Instance
Connecting to EC2 Instance through SSH
Installing Apache HTTP Server and PHP Engine
Installing the Hello World Web Application
Creating Virtual Host
Installing Zend Framework 3 with Composer
Results
Summary
Top