Actividades Zend Framework

9 views
Skip to first unread message

Juan José Ramírez Gónzalez

unread,
Nov 4, 2013, 2:53:14 AM11/4/13
to aplicac...@ciencias.unam.mx
Les mando las actividades correspondientes a este fin de semana, que por motivo del puente seguramente olvidarían hacerlas en estos días:

PRIMERA PARTE

1. necesitan ejecutar el siguiente comando en la carpeta raíz de la aplicación:


php composer
.phar require zendframework/zend-developer-tools:dev-master


 2. Copiamos el archivo
vendor/zendframework/zend-developer-tools/config/zenddevelopertools.local.php.dist

en la carpeta
config/autoload/

y le cambiamos el nombre a
 zdt.local.php

3.modificamos la siguiente sección en el archivo  primera-aplicacion/config/application.config.php:

//... aqui va código

return array(

 
//Especificamos los módulos que integran nuestra aplicación y que usaremos

   
'modules' => array(

       
'ZendDeveloperTools', //<-- agregamos la siguiente línea

       
'Application',

       
'Login',

//... aqui va mas código  

4. Probamos los enlaces del mensaje previo a este.

SEGUNDA PARTE

En esta arte haremos modificaciones a varios de los archivos.

1. Dentro de primera-aplicacion/module/Usuarios/Module.php:


<?
php
namespace Usuarios;


// Importamos las siguientes clases para el manejo del modelo :
use Usuarios\Model\Usuario;
use Usuarios\Model\UsuarioTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;


class Module {
 
//**** aqui esta el código que agregamos de manera previa; son los metodos
 
// getConfig() y getAutoloaderConfig() {

 
/*
  * Funcion mediante la cual definimos el mapeo de una tabla
   * en nuestra BD con el objeto asociado en el modelo
  */



public function getServiceConfig() {
 
return array('factories' => array(
     
'Usuarios\Model\UsuarioTable' => function($sm) {
      //<-- definimos el mapeo de nuestra clase con el adaptador
         $tableGateway
= $sm -> get('UsuarioTableGateway');
         $table
= new  UsuarioTable($tableGateway);
         
return $table;
     
},
 
     
'UsuarioTableGateway' => function($sm) {
 
                 $dbAdapter = $sm -> get('Zend\Db\Adapter\Adapter');//<-- configuramos el adaptador
                   $resultSetPrototype = new ResultSet();
                  $resultSetPrototype
-> setArrayObjectPrototype(new Usuario());
 
                  
                  return new TableGateway('usuarios', $dbAdapter, null, $resultSetPrototype);//<-- especificamos la tabla en nuestra BD
           },
    ),
   
);
 
}

}


2. Creamos el archivo primera-aplicacion/module/Usuarios/src/Usuarios/Model/Usuario.php 

<?php
namespace Usuarios\Model;


class Usuario {
 
public $id;
 
public $username;
 
public $pass;
 
public $email;
 
public $nombre;
 
public $a_paterno;
 
public $a_materno;
 
public $sexo;
 
public $f_nacimiento;

 /**
  * Funcion que mapea los datos (en los campos/variables) del objeto recibido con los del
  * objeto Usuario
  * @param Object $data el objeto a mapear
  */
 
public function exchangeArray($data) {
 $this
-> id = (!empty($data['id'])) ? $data['id'] : null;
 $this
-> username = (!empty($data['username'])) ? $data['username'] : null;
 $this
-> pass = (!empty($data['pass'])) ? $data['pass'] : null;
 $this
-> email = (!empty($data['email'])) ? $data['email'] : null;
 $this
-> nombre = (!empty($data['nombre'])) ? $data['nombre'] : null;
 $this
-> a_paterno = (!empty($data['a_paterno'])) ? $data['a_paterno'] : null;
 $this
-> a_materno = (!empty($data['a_materno'])) ? $data['a_materno'] : null;
 $this
-> sexo = (!empty($data['sexo'])) ? $data['sexo'] : null;
 $this
-> f_nacimiento = (!empty($data['f_nacimiento'])) ? $data['f_nacimiento'] : null;
 
}


}


3. creamos el archivo primera-aplicacion/module/Usuarios/src/Usuarios/Model/UsuarioTable.php
NOTA: les recomiendo que lean la seccion http://framework.zend.com/manual/2.2/en/user-guide/database-and-models.html del manual oficial


<?
php
namespace Usuarios\Model;


use Zend\Db\TableGateway\TableGateway;


class UsuarioTable {
 
 
protected $tableGateway;


 
/**
 * Constructor de la clase UsuarioTable
 * @param TableGateway $tableGateway el adaptador configurado ara nuestra clase
 */

 
public function __construct(TableGateway $tableGateway) {
 $this
-> tableGateway = $tableGateway;
 
}
 
 
/**
 * Mostramos todos los registros
 *@return array el conjunto de todos los registros en forma de un arreglo
 */

 
public function fetchAll() {
 $resultSet
= $this -> tableGateway -> select();
 
return $resultSet;
 
}
 
 
/**
 * Mostramos el registro asociado al id
 * @param  int $id identificador asociado al registro
 * @return array el arreglo que representa al registro aociado con el id
 */

 
public function getUsuario($id) {
  //Nota: necesitamos hacer una consulta y luego procesarel/los resultado(s) de dicha consulta

 
}


 
/**
 * Guardamos el registro asociado al onjeto usuario. Si el objeto existe, se actualizan los datos
 * En caso contrario, se agrega un nuevo registro a a base de datos asociado al objeto
 * @param  Usuario $usuario objeto a guardar
 */

 
public function saveUsuario(Usuario $usuario) {
 
/*Hint: hacemos tres pasos:
  *1. mapeo de datos del objeto
  *2. obtenemos el valor id del objeto
 
*3. insersión de nuevo registro o actualización de un registro existente
  */

 

 
}


 
/**
 * Eliminamos el registro asociado al id
 * @param  int $id identificador asociado al registro
 */

 
public function deleteUsuario($id) {
 
/*
 * Hint: solo borramos
 */
 
}


}


4. Hacemos la siguiente modificaión al archivo primera-aplicacion/module/Usuarios/src/Usuarios/Controller/UsuariosController.php


<?
php

namespace Usuarios\Controller;

//Realizamos los siguientes imports
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;


class UsuariosController extends AbstractActionController{



//definimos el objeto para reallizar las operaciones en la tabla de la base de datos (BD)
 
protected $usuarioTable;


//método que devuelve una instancia del objeto UsuarioTable para realizar operaciones en la BD
 
public function getUsuarioTable(){
         
if (!$this->usuarioTable) {
             $sm
= $this->getServiceLocator();
             $this
->usuarioTable = $sm->get('Usuarios\Model\UsuarioTable');
         
}
 
         
return $this->usuarioTable;
     
}

   
public function indexAction(){
        //antes
       
//return new ViewModel();
       
//ahora
       
return new ViewModel(array(
             
'usuarios' => $this->getUsuarioTable()->fetchAll(),
             
)
        
);
   
}

//... aqui va más código ...
   

5. Modificamos el archivo \primera-aplicacion\module\Usuarios\view\usuarios\usuarios\index.phtml

<?php
 $title
= 'Listado de todos los Usuarios';
 $subtitle
='Primera Aplicación';
 
 $this
-> headTitle($title);
 
?>
 
<header class="page-header well">
 
<h1><?php echo $this -> escapeHtml($title); ?> <small><?php echo $this -> escapeHtml($subtitle); ?></small></h1>
 
</header>
 
<p>
    <a  class="btn btn-primary btn-lg" href="
<?php echo $this -> url('usuarios', array('action' => 'agregar')); ?>">Agregar nuevo usuario</a>
 
</p>


 
<table class="table">
 
<tr>
   
<th>username</th>
 
<th>pass</th>
 
<th>email</th>
 
<th>nombre</th>
 
<th>a_paterno</th>
 
<th>a_materno</th>
 
<th>sexo</th>
 
<th>f_nacimiento</th>
 
</tr>
 
<?php foreach ($usuarios as $usuario) : ?>
 
<tr>
   
<td><?php echo $this -> escapeHtml($usuario -> username ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> pass ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> email ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> nombre ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> a_paterno ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> a_materno ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> sexo ); ?></td>
 
<td><?php echo $this -> escapeHtml($usuario -> f_nacimiento ); ?></td>
 
<td>
         <a class="btn btn-warning" href="
<?php echo $this -> url('usuarios', array('action' => 'editar', 'id' => $usuario -> id)); ?>">Editar</a>
         &nbsp;
         <a class="btn btn-danger" href="
<?php echo $this -> url('usuarios', array('action' => 'borrar', 'id' => $usuario -> id)); ?>">Borrar</a>
     
</td>
 
</tr>
 
<?php endforeach; ?>
 
</table>


6. Escribimos la siguiente url en nuestro navegador:


NOTA FINAL:

revisen los siguientes enlaces: 

Juan José Ramírez Gónzalez

unread,
Nov 4, 2013, 3:23:16 AM11/4/13
to aplicac...@ciencias.unam.mx
después de TODO lo anterior haremos las siguientes modificaciones:

1. en la carpeta raíz del proyecto  ejecutamos el siguiente comando

php composer.phar require bjyoungblood/bjy-profiler:dev-master



2. modificamos la siguiente sección en  el archivo application.config .php  :


return array(
 
//Especificamos los módulos que integran nuestra aplicación y que usaremos
   
'modules' => array(
 
'ZendDeveloperTools', //<-- agregamos la siguiente línea

 
'BjyProfiler',              //<-- ahora agregamos esta línea
 
'Application',
       
'Login',
       
'Usuarios'
       
),
     
//... mas código aqui
   
);



3. modificar el archivo global.php

 
 //NOTA: estas modificaciones son solo para la fase de desarrollo,
 
//modificar a la versión anterior en la fase de producción
$dbParams
= array(
   
'database'  => 'aplicaciones_web',
   
'username'  => 'admin',
   
'password'  => 'admin',
   
'hostname'  => 'localhost',
   
// buffer_results - only for mysqli buffered queries, skip for others
   
'options' => array('buffer_results' => true)
);
 


return array(
//definimos nuestra conexión a la base de datos
   
'db' => array(
       
'driver'         => 'Pdo',
       
'dsn'            => 'mysql:dbname=aplicaciones_web;host=localhost',
       
'driver_options' => array(
            PDO
::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
       
),
   
),
//definimos el adaptador interno (a la aplicación) para la base de datos
   
'service_manager' => array(
       
'factories' => array(
 
     
// definición para fase de producción, requiere ser descomentado
 
/*
    'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
           */

           
           
//definición para fase de desarrollo, comentar en fase de producción
           
'Zend\Db\Adapter\Adapter' => function ($sm) use ($dbParams) {
                $adapter
= new BjyProfiler\Db\Adapter\ProfilingAdapter(array(
                   
'driver'    => 'pdo',
                   
'dsn'       => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'],
                   
'database'  => $dbParams['database'],
                   
'username'  => $dbParams['username'],
                   
'password'  => $dbParams['password'],
                   
'hostname'  => $dbParams['hostname'],
               
));


               
if (php_sapi_name() == 'cli') {
                    $logger
= new Zend\Log\Logger();
                   
// write queries profiling info to stdout in CLI mode
                    $writer
= new Zend\Log\Writer\Stream('php://output');
                    $logger
->addWriter($writer, Zend\Log\Logger::DEBUG);
                    $adapter
->setProfiler(new BjyProfiler\Db\Profiler\LoggingProfiler($logger));
               
} else {
                    $adapter
->setProfiler(new BjyProfiler\Db\Profiler\Profiler());
               
}
               
if (isset($dbParams['options']) && is_array($dbParams['options'])) {
                    $options
= $dbParams['options'];
               
} else {
                    $options
= array();
               
}
                $adapter
->injectProfilingStatementPrototype($options);
               
return $adapter;
           
}, //termina configuracion fase desarrollo, comentar hasta aqui      
       
),
   
),
   
 
);


probamos ahora en el navegador con la uRL

Reply all
Reply to author
Forward
0 new messages