Notice: compact(): Undefined variable: extras in /home1/zendrad/library/Zend/View/Helper/HeadLink.php on line 393
Recursos
Tu estas aquí! > inicio > recursos
Primeros Pasos
Esta guía lo llevará en un viaje para mostrar todos los componentes de Zrad, al tiempo que demuestra cómo crear una aplicación completa (Frontends y Backends) con ZF2 ó ZF1 en corto tiempo
Requerimientos de Sistema
- Servidor Web Zend Server de preferencia (contiene todos los demás requisitos). Descarguelo aquí
- PHP 5.3 ó superior
- Modo Thread Safety desabilitado
- PHP instalado como aplicación CGI/FastCGI
- PHPUnit instalado (opcional)
- Alguna Base de Datos instalada (MySql)
- Sistema Operativo: Linux, Windows ó Mac
- Zend Guard Loader. Descarguelo aquí
- Zend Optimizer+. Descarguelo aquí
Para poder ver estas características en su servidor elabore un archivo info.php con el siguiente contenido:
phpinfo();
Mostrará la siguiente pantalla con los requerimientos mencionados:

Guía de instalación Zend Server CE
- Zrad se ejecuta correctamente en Zend Server además de contener todos los requerimiento mencionados arriba, la siguiente guía muestra como instalar este servidor, leer aquí
- Luego de la instalación, ingresa al Zend Server Admin, por defecto http://localhost:10081
- Ingresa a Server Setup -> Directives, y abra la pestaña date ingrese el timezone de su origen, p.e: America/Lima
- Listo!!!
Instalación
- Antes de instalar Zrad, asegurése de tener instalador Zend Tool,
abra la terminal de su sistema operativo (SO), p.e: en Win 7,8 inicio->escriba cmd en el buscador,
luego escribe "zf ?" ó "zf show version" y presione enter, debería de mostrar
una ventana similar a la siguiente:
C:\Users\jminaya>zf show version Zend Framework Version: 1.12.0 C:\Users\jminaya>
En caso te muestre algún tipo de error, puedes seguir estos tutoriales aquí ó aquí
- Descargue Zrad aquí
- Ubicate el el directorio donde esta instalado Zend (puedes ver el include_path en info.php) y descomprime el Zip descargado en el paso anterior
- Nota: ZradAid también debe de estar en este directorio, quedadno de la siguiente manera
- Abra nuevamente el terminal del SO y escriba el siguiente comando "zf --setup config-file" y presione enter
- Ahora escriba el siguiente comando "zf enable config.provider Zrad_Tool_Project_Provider_Zrad"y presione enter
- Finalmente probamos si todo se ha instalado correctamente
- Ahora si podemos usar Zrad

C:\Users\jminaya>zf --setup config-file Config file written to \Users\Juan/.zf.ini
C:\Users\jminaya>zf enable config.provider Zrad_Tool_Project_Provider_Zrad Provider/Manifest 'Zrad_Tool_Project_Provider_Zrad' was enabled for usage with Zend Tool.
C:\Users\jminaya>zf ? Zend Framework Command Line Console Tool v1.12.0 Usage: zf [--global-opts] action-name [--action-opts] provider-name [--provider-opts] [provider parameters ...] Note: You may use "?" in any place of the above usage string to ask for more specific help information. Example: "zf ? version" will list all available actions for the version provider. Providers and their actions: Zrad zf create-project zrad name zf create-form-backend zrad table-name name in-captcha[=false] module[=admin] zf create-form zrad table-name name module in-captcha[=false] zf create-form-frontend zrad table-name name module controller action[=index] in-captcha[=false] zf update-form-frontend zrad table-name name module controller action-name in-captcha[=false] zf create-model zrad table-name module-name Note: There are specialties, use zf create-model zrad.? to get specific help on them. zf update-model zrad table-name module-name zf init-backend zrad zf init-facebook zrad zf init-ubigeo zrad zf create-module zrad name zf create-crud-backend zrad table-name module in-captcha[=false] generate-form[=1] zf update-crud-backend zrad table-name module in-captcha[=false] generate-form[=1] zf create-crud-frontend zrad table-name module in-captcha[=1] generate-form[=1]
Antes de Empezar
Para poder crear un proyecto Zend Framework con Zrad tenga en cuenta lo siguiente:

Los pasos 1,2 y 3 son obligatorios, lo demás pasos son opcionales y pueden ser ejecutados en cualquier orden, dependiendo del proyecto y/o programador.
Paso a Paso
Estos son los pasos para crear un proyecto con Zrad:
- Ingresa al directorio principal de su servidor (htdocs, www, public_html, etc.) desde la consola de comando
- Ejecute el siguiente comando "zf create-project zrad demo-zrad", donde demo-zrad es el nombre del proyecto, este comando creará un proyecto en NetBeans (DemoZrad) en CamelCase
G:\Programas\Zend Server\Apache2\htdocs>zf create-project zrad demo-zrad zrad-> Proyecto creado en G:/Programas/Zend Server/Apache2/htdocs/demo-zrad zrad-> Nota: Para mayor informacion del uso de un VHOST, por favor lea docs/README. zrad-> Nota: Para el uso de Zrad, por favor lea docs/LICENCIA. zrad-> Nota: Crea un codigo GA para tu proyecto. zrad-> Nota: PHPUnit no se encuentra en tu include_path. G:\Programas\Zend Server\Apache2\htdocs>
- Ingresa al proyecto (carpeta creada) y abra el application.ini, mostrá una configuración similar a:
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.params.displayExceptions = 0 autoloadernamespaces.zradAid = "ZradAid_" resources.view.helperPath.ZradAid_View_Helper = "ZradAid/View/Helper" resources.layout.layout = "web-default" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.frontController.params.prefixDefaultModule = "1" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" ; Lenguaje = true resources.locale.default = "es_PE" resources.locale.force = true ; Sesiones = true resources.session.save_path = APPLICATION_PATH "/../data/sessions" resources.session.use_only_cookies = true resources.session.remember_me_seconds = 240 ; Log = true resources.log.stream.writerName = "Stream" resources.log.stream.writerParams.stream = APPLICATION_PATH "/../data/logs/application.log" resources.log.stream.writerParams.mode = "a" resources.log.stream.filterName = "Priority" resources.log.stream.filterParams.priority = 4 ; Firebug = true resources.log.firebug.writerName = "Firebug" resources.log.firebug.filterName = "Priority" resources.log.firebug.filterParams.priority = 7 ; Google Analytics = true ga.webId = "UA-XXXXXXXX-X" ; Base de Datos = true resources.db.adapter = "Pdo_Mysql" resources.db.params.host = "127.0.0.1" resources.db.params.charset = "utf8" resources.db.params.username = "" resources.db.params.password = "" resources.db.params.dbname = ""
- Podemos observar que Zrad configura varios parámetro comunes a todos los proyectos como: Manejo de Sesiones, Manejo de Logs, Debug con FirePHP, acceso a Base de Datos y Google Analytics
- Abra NetBeans (7.2 ó Superior) y abra directamente el proyecto, la estructura de directorios creada con Zrad es:
- Abre el navegador y escriba http://localhost/demo-zrad/public y listo
Antes de Empezar
Para el ejemplo tomaremos como modelo de datos el siguiente diagrama DER:

Paso a Paso
Los modelos deben ser creados en algún módulo, por defecto será default, pero puedes indicarle a Zrad el módulo que desees
Zrad sigue la recomendaciones de Zend usando el patrón DataMapper, ver más información aquí
Estos son los pasos para crear modelos con Zrad:
- Crea tu base de datos y tablas dentro del servidor Mysql InnoDB (utiliza UTF8 en tu cotejamiento)
- Configura los parámetros de base de datos en entorno donde ejecutará tu proyecto (production, staging, testing, development)
[development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 ; Base de Datos = true resources.db.params.dbname = "zrad_demo" resources.db.params.username = "root" resources.db.params.password = "" resources.db.params.host = "127.0.0.1"
- Ingresa al proyecto demo-zrad. p.e: cd demo-zrad, desde la consola
- Ejecuta el comando "zf create-model zrad blog default" desde la consola o el Run Zend Command de NetBeans, donde blog es el nombre de la tabla y default es el nombre del módulo
G:\Programas\Zend Server\Apache2\htdocs\demo-zrad>zf create-model zrad blog default zrad-> Modelo de la entidad "blog" ha sido creado
- El modelo es creado en modules/default/models, si abrimos las clases creadas veremos:
El DbTable no sólo esta asociado a la tabla además de ello Zrad Mapea todas las tablas relacionadas ya sean: Tablas dependientes o Referenciadas
/** * DbTable */ class Default_Model_DbTable_Blog extends Zend_Db_Table_Abstract { protected $_name = 'blog'; protected $_dependentTables = array('Post'); protected $_referenceMap = array( 'Area' => array( 'columns' => 'area_id', 'refTableClass' => 'Areas_Model_DbTable_Area', 'refColumns' => 'id' ), 'Autor' => array( 'columns' => 'autor_id', 'refTableClass' => 'Autores_Model_DbTable_Autor', 'refColumns' => 'id' ) ); }
El Domain Object es la clase principal de un patrón DataMapper aquí irá la lógica de negocio de la aplicación
/** * Domain Object */ class Default_Model_Blog { protected $_id = null; protected $_nombre = null; protected $_descripcion = null; protected $_autorId = null; protected $_areaId = null; public function __construct(array $options = null) { if (is_array($options)) { $this->setOptions($options); } } public function __set($name, $value) { $method = 'set' . $name; if (('mapper' == $name) || !method_exists($this, $method)) { throw new Exception('Invalid blog property'); } $this->$method($value); } public function __get($name) { $method = 'get' . $name; if (('mapper' == $name) || !method_exists($this, $method)) { throw new Exception('Invalid blog property'); } return $this->$method(); } public function setOptions(array $options) { $methods = get_class_methods($this); foreach ($options as $key => $value) { $method = 'set' . ucfirst($key); if (in_array($method, $methods)) { $this->$method($value); } } return $this; } public function toArray() { $data = array(); $vars = get_class_vars('Default_Model_Blog'); foreach ($vars as $key => $value) { $key = substr($key, 1); $method = 'get' . ucfirst($key); $data[$key] = $this->$method(); } return $data; } public function setId($id) { $this->_id = $id; return $this; } public function getId() { return $this->_id; } public function setNombre($nombre) { $this->_nombre = $nombre; return $this; } public function getNombre() { return $this->_nombre; } public function setDescripcion($descripcion) { $this->_descripcion = $descripcion; return $this; } public function getDescripcion() { return $this->_descripcion; } public function setAutorId($autorId) { $this->_autorId = $autorId; return $this; } public function getAutorId() { return $this->_autorId; } public function setAreaId($areaId) { $this->_areaId = $areaId; return $this; } public function getAreaId() { return $this->_areaId; } }
El Mapper contiene todas las funciones de acceso a base de datos representado por las funciones fetchAll, find, save, etc.
/** * Mapper */ class Default_Model_BlogMapper { /** * @var Default_Model_DbTable_Blog */ protected $_dbTable = null; /** * @var array */ private $_filters = null; /** * Inicializa la Zend_Db_Table * * @param string $dbTable */ public function setDbTable($dbTable) { if (is_string($dbTable)) { $dbTable = new $dbTable(); } if (!$dbTable instanceof Zend_Db_Table_Abstract) { throw new Exception('Invalid table data gateway provided'); } $this->_dbTable = $dbTable; return $this; } /** * Devuelve una instacia de Zend_Db_Table * * @return Default_Model_DbTable_Blog */ public function getDbTable() { if (null === $this->_dbTable) { $this->setDbTable('Default_Model_DbTable_Blog'); } return $this->_dbTable; } /** * Inserta un nuevo objeto a la tabla * * @param Default_Model_Blog $blog */ public function save(Default_Model_Blog $blog) { $data = array( 'id' => $blog->getId(), 'nombre' => $blog->getNombre(), 'descripcion' => $blog->getDescripcion(), 'autor_id' => $blog->getAutorId(), 'area_id' => $blog->getAreaId() ); if (null === ($id = $blog->getId())) { unset($data['id']); return $this->getDbTable()->insert($data); } else { $this->getDbTable()->update($data, array('id = ?' => $id)); } } /** * Obtiene una instancia de la clase Default_Model_Blog * * @param int $id * @param Default_Model_Blog $blog */ public function find($id, Default_Model_Blog $blog) { $result = $this->getDbTable()->find($id); if (0 == count($result)) { return; } $row = $result->current(); $blog->setId($row->id); $blog->setNombre($row->nombre); $blog->setDescripcion($row->descripcion); $blog->setAutorId($row->autor_id); $blog->setAreaId($row->area_id); } /** * Obtiene un array de instancias de la clase Default_Model_Blog * * @param array $where * @return array */ public function fetchAll($where = null) { $resultSet = (is_array($where)) ? $this->getDbTable()->fetchAll($where) : $this->getDbTable()->fetchAll(); $entries = array(); foreach ($resultSet as $row) { $entry = new Default_Model_Blog(); $entry->setId($row->id); $entry->setNombre($row->nombre); $entry->setDescripcion($row->descripcion); $entry->setAutorId($row->autor_id); $entry->setAreaId($row->area_id); $entries[] = $entry; } return $entries; } /** * Elimina un registro de la tabla * * @param int $id */ public function delete($id) { $where = $this->getDbTable()->getAdapter()->quoteInto('id = ?', $id); $this->getDbTable()->delete($where); } }
- Si existe algún cambio el el DER, este cambio se refleja en el modelo ejecutando el siguiente comando "zf update-model zrad blog default"
G:\Programas\Zend Server\Apache2\htdocs\demo-zrad>zf update-model zrad blog default zrad-> Modelo de la entidad "blog" ha sido actualizado
- Los método creados en cualquier clase de dominio no se perderán ya que Zrad hace uso de Reflection que sólo actualiza los nuevos campos :)
Para crear formularios se pueden realizar de dos formas, la más sencilla es crear sólo la
clase y poder usarla como validación de formularios o procesar peticiones AJAX, la
segunda forma es la completa en donde se crearán Vistas y Controladores(también puedes usar uno existente), ambas
formas tiene la características de crear campos Captcha.
Nota: Zrad contiene una base de conocimiento complementada por la Guía de Diseño de Base de Datos.
Campos como emial, dni, ruc, entre otros se crearán validaciones a medida dependiendo del tipo y semántica del campo de la tabla.
Formulario (sólo clase)
Estos son los pasos para crear un formulario clase con Zrad:
- Ingresa al proyecto demo-zrad. p.e: cd demo-zrad, desde la terminal
- Ejecute: "zf create-form zrad empleado Empleado default"
- También puede ejecutar: "zf create-form zrad empleado Empleado default 1" para insertar un campo captcha
Donde:
empleado es el nombre de la tabla.
Empleado es el nombre del formulario.
default es el nombre del módulo donde se va ha crear.
1 le indica a Zrad que lo cree con un captcha.
G:\Programas\Zend Server\Apache2\htdocs\demo-zrad>zf create-form zrad empleado Empleado default 1 zrad-> Formulario "Empleado" ha sido creado en: "default"
- Verificamos el contenido de la clase
- Por defecto Zrad quita todos los decoradores de Zend Form para poder ser integrado con la maquetación HTML 5 y CSS3 de manera más rápida y sencilla
class Default_Form_Empleado extends Zend_Form { public function init() { // Custom Validator and Elements $this->addPrefixPath('ZradAid_Form', 'ZradAid/Form/'); $this->addElementPrefixPath('ZradAid_Validate', 'ZradAid/Validate', 'validate'); // Set the method for the display form to POST $this->setMethod('post'); // Add Nombres element $this->addElement('text', 'nombres', array( 'label' => 'Nombres', 'description' => ' ', 'required' => true, 'filters' => array( 'StringTrim' ), 'validators' => array( 'NotEmpty', array('StringLength', false, array(3,100)), array('Alpha', false, array('allowWhiteSpace' => true)) ), 'decorators' => array( array('ViewHelper', array('tag' => null)) ) )); // Add Apellidos element $this->addElement('text', 'apellidos', array( 'label' => 'Apellidos', 'description' => ' ', 'required' => true, 'filters' => array( 'StringTrim' ), 'validators' => array( 'NotEmpty', array('StringLength', false, array(3,100)), array('Alpha', false, array('allowWhiteSpace' => true)) ), 'decorators' => array( array('ViewHelper', array('tag' => null)) ) )); // Add Direccion element $this->addElement('text', 'direccion', array( 'label' => 'Direccion', 'description' => ' ', 'required' => true, 'filters' => array( 'StringTrim' ), 'validators' => array( 'NotEmpty', array('StringLength', false, array(3,255)) ), 'decorators' => array( array('ViewHelper', array('tag' => null)) ) )); // Add Dni element $this->addElement('text', 'dni', array( 'label' => 'Dni', 'description' => ' ', 'required' => true, 'filters' => array( 'StringTrim' ), 'validators' => array( 'NotEmpty', array('StringLength', false, array(8,8)), 'Digits' ), 'maxlength' => 8, 'decorators' => array( array('ViewHelper', array('tag' => null)) ) )); // Add Cargo element $this->addElement('text', 'cargo', array( 'label' => 'Cargo', 'description' => ' ', 'required' => true, 'filters' => array( 'StringTrim' ), 'validators' => array( 'NotEmpty', array('StringLength', false, array(3,100)), array('Alpha', false, array('allowWhiteSpace' => true)) ), 'decorators' => array( array('ViewHelper', array('tag' => null)) ) )); // Add captcha element $this->addElement('text', 'verificacion', array( 'label' => 'Código de verificación', 'description' => 'Ingrese los caracteres que logra ver en la imagen', 'required' => true, 'maxlength' => 5, 'style' => 'width:102px', 'filters' => array( 'StringTrim' ), 'validators' => array( 'NotEmpty', 'Alnum', 'Captcha', array('StringLength', false, array(5)) ), 'decorators' => array( array('ViewHelper', array('tag' => null)) ) )); } }
Formulario (clase, controlador y vista)
- Para crear un formulario completo puede hacerlos sobre un controlador y acción ya creados(incluido su vista) o dejar
que Zrad lo cree por usted (Controlador Registro y acción index). Para ejemplo crearemos un controlador Empleado y una acción nuevo
G:\Programas\Zend Server\Apache2\htdocs\demo-zrad>zf create controller Empleado 1 default Note: PHPUnit is required in order to generate controller test stubs. Creating a controller at demo-zrad/application/modules/default/controllers/EmpleadoController.php Creating an index action method in controller Empleado Creating a view script at demo-zrad/application/modules/default/views/scripts/empleado/index.phtml Updating project profile 'demo-zrad/.zfproject.xml' G:\Programas\Zend Server\Apache2\htdocs\demo-zrad>zf create action nuevo Empleado 1 default Note: PHPUnit is required in order to generate controller test stubs. Creating an action nuevo at demo-zrad/application/modules/default/controllers/EmpleadoController.php Updating project profile 'demo-zrad/.zfproject.xml' Creating a view script at demo-zrad/application/modules/default/views/scripts/empleado/nuevo.phtml Updating project profile 'demo-zrad/.zfproject.xml'
- Una vez creados nuestros recursos iniciales procedemos a crear el formulario con el siguiente comando "zf create-form-frontend zrad empleado Empleado default Empleado nuevo"
G:\Zend Server\Apache2\htdocs\demo-zrad>zf create-form zrad empleado Empleado default 1 zrad-> Formulario "Empleado" ha sido creado en: "default"
- Finalmente verificamos si se ha creado correctamente en http://localhost/demo-zrad/public/empleado/nuevo
- Si existe algún cambio el el DER, este cambio se refleja en el modelo ejecutando el siguiente comando "zf update-form-frontend zrad empleado Empleado default Empleado nuevo"
G:\Zend Server\Apache2\htdocs\demo-zrad>zf update-form-frontend zrad empleado Empleado default Empleado nuevo 1 zrad-> Formulario "Empleado" ha sido creado en: "default/empleado/nuevo"
Video Tutorial
Antes de Empezar
Consideraciones: Para crear proyectos en Facebook se debe contemplar lo siguiente: crear una aplicación Facebook y tener una base de datos vacía(sin tablas). los artefactos que se crearán son los siguientes:
- Pantalla "No Me Gusta" (aunque no este recomendada por Facebook :( ).
- Pantalla "Me Gusta".
- Ubigeo.
- Formulario de Registro.
- Auto completado de campos con los datos obtenidos en Facebook.
- Métodos para Fin de Campaña y Fin del proceso de Registro.
- Módulo: Concurso, Facebook y Participantes.
- Persistencia de estado (Saber en que paso se quedo del registro).
- Poder ejecutar el proceso de registro con "Datos Simulados" en entornos de desarrollo.
Paso a Paso
- Creeremos un nuevo proyecto ejecutamos el siguiente comando "zf create-project zrad demo-zrad-fb", luego ingrese al proyecto
- También creamos una base de datos vacía, tal como se muestra:
mysql> use demo_zrad_fb; Database changed mysql> show tables; Empty set (0.00 sec)
- Configura los parámetros para accesos a base de datos (development por defecto)
- Ejecute el siguiente comando "zf init-facebook zrad"
G:\Programas\Zend Server\Apache2\htdocs\demo-zrad-fb>zf init-facebook zrad zrad-> Modelo de la entidad "ubigeo" ha sido creado zrad-> Ubigeo creado en el modulo "default" zrad-> Modulo "participantes" ha sido creado en: demo-zrad-fb/application/modules/participantes zrad-> Modelo de la entidad "participante" ha sido creado zrad-> Modulo "facebook" ha sido creado en: demo-zrad-fb/application/modules/facebook zrad-> Modulo "concurso" ha sido creado en: demo-zrad-fb/application/modules/concurso zrad-> Formulario "Participante" ha sido creado en: "concurso/registro/index" zrad-> Nota: PHPUnit es requerido para generar tests a los controladores zrad-> Proyecto "Facebook" se ha iniciado correctamente
- Verificamos la creación de las tablas
mysql> show tables; +------------------------+ | Tables_in_demo_zrad_fb | +------------------------+ | participante | | ubigeo | +------------------------+ 2 rows in set (0.00 sec)
Capturas
Pantalla "No Me Gusta"

Pantalla "Me Gusta"

Pantalla "Registro"

Pantalla "Cierre Campaña"

Video Tutorial
Arquitectura
Propuesta de Arquitectura para Aplicaciones Facebook

Antes de Empezar
Consideraciones: Utiliza tablas InnoDB para poder aprovechar la creación de CRUD(create, read, update, delete) recursivos.
Paso a Paso
- Creamos un proyecto llamado zrad-demo e ingresamos a él
- Tomaremos como modelo de datos el propuesto en el tab "Modelos"
- Ejecute el siguiente comando "zf create-crud-frontend zrad blog", donde blog es la entidad a crear
G:\Zend Server\Apache2\htdocs\zrad-demo>zf create-crud-frontend zrad blog zrad-> MAPEANDO la entidad "blog"... zrad-> Modulo "blogs" ha sido creado en: zrad-demo/application/modules/blogs zrad-> Modelo de la entidad "blog" ha sido creado zrad-> Nota: PHPUnit es requerido para generar tests a los controladores zrad-> Controlador "Registro" ha sido creado zrad-> Formulario "Nuevo" ha sido creado en: "blogs/registro/index" zrad-> CRUD FRONTEND para la entidad "blog" ha sido creada. zrad-> Se encontro un Tabla RELACIONADA zrad-> ------------------------------------------ zrad-> MAPEANDO la entidad "area"... zrad-> Modulo "areas" ha sido creado en: zrad-demo/application/modules/areas zrad-> Modelo de la entidad "area" ha sido creado zrad-> Nota: PHPUnit es requerido para generar tests a los controladores zrad-> Controlador "Registro" ha sido creado zrad-> Formulario "Nuevo" ha sido creado en: "areas/registro/index" zrad-> CRUD FRONTEND para la entidad "area" ha sido creada. zrad-> Se encontro un Tabla RELACIONADA zrad-> ------------------------------------------ zrad-> MAPEANDO la entidad "autor"... zrad-> Modulo "autores" ha sido creado en: zrad-demo/application/modules/autores zrad-> Modelo de la entidad "autor" ha sido creado zrad-> Nota: PHPUnit es requerido para generar tests a los controladores zrad-> Controlador "Registro" ha sido creado zrad-> Formulario "Nuevo" ha sido creado en: "autores/registro/index" zrad-> CRUD FRONTEND para la entidad "autor" ha sido creada.
- Zrad Mapea todas la tablas relacionadas a la entidad "blog" los mapea
- Se creará un módulo(en plural) y controlador "Registro" por cada entidad
Video Tutorial
Antes de Empezar
Consideraciones: Utiliza tablas InnoDB para poder aprovechar la creación de CRUD(create, read, update, delete) recursivos.
Paso a Paso
- Iniciar el Backend con el siguiente comando "zf init-backend zrad"
G:\Programas\Zend Server\Apache2\htdocs\zrad-demo>zf init-backend zrad zrad-> Nota: PHPUnit es requerido para generar tests a los controladores zrad-> El backend se ha inicializado
- El comando anterior crea un módulo admin con autenticación simple
- Tomaremos como modelo de datos el propuesto en el tab "Modelos"
- Ejecutamos el siguiente comando "zf init-backend zrad"
G:\Zend Server\Apache2\htdocs\zrad-demo>zf create-crud-backend zrad blog zrad-> MAPEANDO la entidad "blog"... zrad-> Modulo "blogs" ha sido creado en: zrad-demo/application/modules/blogs zrad-> Modelo de la entidad "blog" ha sido creado zrad-> Formulario "Blog" ha sido creada en: "modules/admin/forms". zrad-> CRUD BACKEND para la entidad "blog" ha sido creada. zrad-> Se encontro un Tabla RELACIONADA zrad-> ------------------------------------------ zrad-> MAPEANDO la entidad "area"... zrad-> Modulo "areas" ha sido creado en: zrad-demo/application/modules/areas zrad-> Modelo de la entidad "area" ha sido creado zrad-> Formulario "Area" ha sido creada en: "modules/admin/forms". zrad-> CRUD BACKEND para la entidad "area" ha sido creada. zrad-> Se encontro un Tabla RELACIONADA zrad-> ------------------------------------------ zrad-> MAPEANDO la entidad "autor"... zrad-> Modulo "autores" ha sido creado en: zrad-demo/application/modules/autores zrad-> Modelo de la entidad "autor" ha sido creado zrad-> Formulario "Autor" ha sido creada en: "modules/admin/forms". zrad-> CRUD BACKEND para la entidad "autor" ha sido creada.
- Zrad creará vista para listar, crear, editar y eliminar registros dentro del módulo admin
Video Tutorial
El Ubigeo es el identificador numérico único que se asigna a cada ámbito político administrativo
del país para identificar al departamento, provincia y distrito.
Instituto Nacional de Estadística e Informática del Perú.
Actualizado Julio 2012.
Paso a Paso
- Ingresa al proyecto donde desea crear el ubigeo
- Configura los parámetros de base de datos en entorno donde ejecutará tu proyecto
- Ejecuta el siguiente comando: ""
G:\Programas\Zend Server\Apache2\htdocs\zrad-ubigeo>zf init-ubigeo zrad zrad-> Modelo de la entidad "ubigeo" ha sido creado zrad-> Ubigeo creado en el modulo "default"
- Verifica si la Tabla Ubigeo se ha creado en tu BD
mysql> show tables; +-----------------------+ | Tables_in_zrad_ubigeo | +-----------------------+ | ubigeo | +-----------------------+ 1 row in set (0.03 sec)
- Abrimos el modelo creado
class Default_Model_UbigeoMapper { /** * Instancia de Zend_Db_Table * * @var Default_Model_DbTable_Ubigeo */ protected $_dbTable = null; public function setDbTable($dbTable) { if (is_string($dbTable)) { $dbTable = new $dbTable(); } if (!$dbTable instanceof Zend_Db_Table_Abstract) { throw new Exception('Invalid table data gateway provided'); } $this->_dbTable = $dbTable; return $this; } public function getDbTable() { if (null === $this->_dbTable) { $this->setDbTable('Default_Model_DbTable_Ubigeo'); } return $this->_dbTable; } public function find($id, Default_Model_Ubigeo $ubigeo) { $result = $this->getDbTable()->find($id); if (0 == count($result)) { return; } $row = $result->current(); $ubigeo->setId($row->id); $ubigeo->setCodigoDepartamento($row->codigo_departamento); $ubigeo->setCodigoProvincia($row->codigo_provincia); $ubigeo->setCodigoDistrito($row->codigo_distrito); $ubigeo->setNombre($row->nombre); } public function fetchAll($where = null) { $resultSet = (is_array($where)) ? $this->getDbTable()->fetchAll($where) : $this->getDbTable()->fetchAll(); $entries = array(); foreach ($resultSet as $row) { $entry = new Default_Model_Ubigeo(); $entry->setId($row->id); $entry->setCodigoDepartamento($row->codigo_departamento); $entry->setCodigoProvincia($row->codigo_provincia); $entry->setCodigoDistrito($row->codigo_distrito); $entry->setNombre($row->nombre); $entries[] = $entry; } return $entries; } /** * Puebla los combos HTMls * * @param bool $default * @param string $optionDefault * @return array */ public function obtenerCiudades($default = true, $optionDefault = 'Todas', $simple = false) { $resultSet = $this->getDbTable()->fetchAll(array( 'codigo_provincia = ?' => 0, 'codigo_distrito = ?' => 0 )); $options = ($default) ? array('' => $optionDefault) : array(); foreach ($resultSet as $row) { $key = ($simple) ? $row->nombre : $row->id; $options[$key] = $row->nombre; } return $options; } /** * Busca las provincias de un departamento * * @param int $codigoDepartamento * @return array */ public function obtenerProvinciasPorDepartamento($codigoDepartamento) { $resultSet = $this->getDbTable()->fetchAll(array( 'codigo_departamento = ?' => $codigoDepartamento, 'codigo_provincia <> ?' => 0, 'codigo_distrito = ?' => 0, )); return $resultSet->toArray(); } /** * Busca las provincias de un departamento * * @param int $codigoDepartamento * @param int $codigoProvincia * @return array */ public function obtenerDistritosPorProvincia($codigoDepartamento, $codigoProvincia) { $resultSet = $this->getDbTable()->fetchAll(array( 'codigo_departamento = ?' => $codigoDepartamento, 'codigo_provincia = ?' => $codigoProvincia, 'codigo_distrito <> ?' => 0, )); return $resultSet->toArray(); } }
- Las funciones: obtenerProvinciasPorDepartamento, obtenerDistritosPorProvincia se utilizan para los combos dependientes de Departamento, Provincia y Distrito en los Formularios.
Paso a Paso
- Ingresa al proyecto donde desea crear el ubigeo
- Ejecute el siguiente comando: "zf create-module zrad participantes"
G:\Programas\Zend Server\Apache2\htdocs\zrad-ubigeo>zf create-module zrad participantes zrad-> Modulo "participantes" ha sido creado en: G:\Programas\Zend Server\Apache2\htdocs\zrad-ubigeo/application/modules/participantes
- Zrad creará un módulo con los recursos necesarios para ejecutar formularios y modelos
usando Autoloader
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoloaderParticipantes() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Participantes_', 'basePath' => dirname(__FILE__) . '/modules/participantes')); return $autoloader; } }
Recomendaciones al diseño de Base de Datos
Para poder aprovechar al máximo Zrad sigue estas recomendaciones que son un compendio de las buenas prácticas dictadas por Oracle en su Base de Datos MysqlAntes de empezar; lea la "Guía de Diseño para Base de Datos" aquí
Campos de tipo Multimedia
Para almacenar el nombre fisico de una imagen use los siguientes nombres de columna:
imagen, foto, fotografia.
Para el tipo de datos use VARCHAR(60).
Direcciones URL
Para albergar un ruta URL (http, https) use los siguientes nombres de columna:
youtube, url, link.
Para el tipo de datos use VARCHAR(200) ó mas.
Archivos
Si desea almacenar archivos (nombre físico) use los siguientes nombres de columna:
pdf, documento, excel, archivo.
Para el tipo de datos use VARCHAR(60).
Nombres de personas
Para almacenar nombres de personas use los siguientes nombres de columna:
nombres, nombre, apellidos.
Para el tipo de datos use VARCHAR(100).
Correo Electrónico
Para almacenar correos electrónicos use los siguientes nombres de columna:
email, correo.
Nota: Nota: el tamaño maximo para los correo es 320(RFC 3696) o 254(ICANN)y el minimo el 4, el promedio de uso es 32
http://www.eph.co.uk/resources/email-address-length-faq/
Para el tipo de datos use VARCHAR(100).
Titulares y Descripciones
Si deseas colocar datos de tipo de noticias o post para un blog, use los siguientes nombres de columna:
titulo, descripcion.
Para el tipo de dato use VARCHAR(255) y TEXT para el titulo y descripción respectivamente.
Números de Contactos
Para almacenar números telefónicos use los siguientes nombres de columna:
celular, telefono.
Para el tipo de datos use VARCHAR(15).
Empresas o Personas Naturales
Para almacenar el numero de RUC o dni use los siguientes campos:
dni, ruc.
Para el tipo de dato para dni y ruc use VVARCHAR(8), VARCHAR(11) ó CHAR(8), CHAR(11) respectivamente, esto ya que hay alguno dni(s) que empiezan con "0".
Direcciones Físicas
Para registrar una dirección física use el siguiente nombre de columna:
direccion.
Para el tipo de datos use VARCHAR(255).
Soporte y Consulta
Zrad ofrece una variedad de servicios de consultoría para PHP y Zend Framework. Para cualquier consulta escribeme a minayaleon@gmail.com / info@zend-rad.com