ccc

Mostrando entradas con la etiqueta Zend Framework. Mostrar todas las entradas
Mostrando entradas con la etiqueta Zend Framework. Mostrar todas las entradas

Zend Framework: Bases de datos, Operaciones

src/Application/Controller/BasedatosController.php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;

use Application\Model\Entity\Usuarios;

class BasedatosController extends AbstractActionController {

public $dbAdapter;

    public function indexAction()   {
        return new ViewModel();
    }


// ***************************
public function mostrarAction() {
$this->dbAdapter=$this->getServiceLocator()->get('Zend\Db\Adapter');
        $u = new Usuarios($this->dbAdapter);
$valores = array
(
            "titulo"    =>  "Mostrando datos desde TableGateway",
            'datos'     =>  $u->getUsuarios()
);
        return new ViewModel($valores);
}

// ***************************
public function verAction() {
$this->dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter');
        $u = new Usuarios($this->dbAdapter);
$id = (int) $this->params()->fromRoute('id', 0); // sacar el id por la url GET
$valores = array(
            "titulo"    =>  "Mostrando detalle del usuario",
            'datos'     =>  $u->getUsuarioPorId($id)
);
        return new ViewModel($valores);
}

// ***********************************
public function addAction() {
        $this->dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter');
        $u = new Usuarios($this->dbAdapter);
$data = array(
"nombre" => "usernuevo",
"email" => "usernuesssvo@gmail.com"
);
$u->addUsuario($data);
// $u->updateUsuario("3",$data);
// 

// una vez hecho mostrar todos los registros de nuevo
        $valores = array(
"titulo" => "Insertando uno nuevo",
"datos" => $u->getUsuarios()
        );
        return new ViewModel($valores);
    }

// ***********************************
public function updateAction() {
        $this->dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter');
        $u = new Usuarios($this->dbAdapter);
$data = array(
"nombre" => "usermodificado",
"email" => "usermodificado@gmail.com"
);
$u->updateUsuario("4",$data);

// una vez hecho mostrar todos los registros de nuevo
        $valores = array(
"titulo" => "Modificando un registro",
"datos" => $u->getUsuarios()
        );
        return new ViewModel($valores);
    }

// ***********************************
public function deleteAction() {
        $this->dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter');
        $u = new Usuarios($this->dbAdapter);
$data = array(
"nombre" => "usermodificado",
"email" => "usermodificado@gmail.com"
);
$u->deleteUsuario("4", $data);

// una vez hecho mostrar todos los registros de nuevo
        $valores = array(
"titulo" => "Borrando un registro",
"datos" => $u->getUsuarios()
        );
        return new ViewModel($valores);
    }
}
-------------------------------------------------------------------------------
src/Application/Model/Entity/Usuarios.php
namespace Application\Model\Entity;

use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Adapter\Adapter;

class Usuarios extends TableGateway {

public function __construct(Adapter $adapter = null, $databaseSchema = null, ResultSet $selectResultPrototype = null) {
        return parent::__construct('usuarios', $adapter, $databaseSchema, $selectResultPrototype);
    }

public function getUsuarios() {
         $datos = $this->select();
         return $datos->toArray();
    }

public function getUsuarioPorId($id) {
        $id  = (int) $id;
        $registro = $this->select(array('id' => $id));
        $row = $registro->current();
        if (!$row) {
            throw new \Exception("No hay registros asociados al valor $id");
        }
        return $row;
     }
 
public function addUsuario($data=array()) {
           $this->insert($data);
     }

     public function updateUsuario($id, $data=array()) {
        $this->update($data, array('id' => $id));
    }

public function deleteUsuario($id) {
        $this->delete(array('id' => $id));
    }

}
---------------------------------------------------------------------
view/Application/basedatos/mostrar.phtml
<h1><?php echo $this->titulo?></h1>
<table style="width:400px; text-align:left">
    <tr>
        <th>Id</th>
        <th>Nombre</th>
        <th>E-Mail</th>
    </tr>
    <?php foreach ($this->datos as $dato){ ?>
        <tr style="background-color:<?php echo $this->cycle(array("#F0F0F0","#FFFFFF"))->next()?>">

            <td><?php echo $dato["id"] ?></td>
            <td><?php echo $dato["nombre"] ?></td>
            <td><?php echo $dato["email"] ?></td>
            <td>
                <a href="<?php echo $this->basePath() ?>/application/basedatos/ver/<?php echo $dato["id"]?>">ver</a>
            </td>
        </tr>
    <?php } ?>

    <?php
    $this->cycle()->assign(array("#F0F0F0", "#FFFFFF"));
    $this->cycle()->prev();
    ?>

</table>

Las vistas de add.phtml, delete.phtml y update.phtml serán idénticas a las de mostrar.phtml
------------------------------------------------------
Para verlo:
http://localhost/zend/zendproyecto8LSG/public/application/basedatos/mostrar
http://localhost/zend/zendproyecto8LSG/public/application/basedatos/add
http://localhost/zend/zendproyecto8LSG/public/application/basedatos/update
http://localhost/zend/zendproyecto8LSG/public/application/basedatos/delete

Zend Framework: Base de datos

config/autoload/local.php
return array
(
    'service_manager'=>array(
        'factories'=>array(
            'Zend\Db\Adapter'=>'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
    'db'=>array(
        'username'=>'root',
        'password'=>'',
        'driver'=>'Pdo',
        'dsn'=>'mysql:dbname=pruebazend;host:localhost',
        'driver_options'=>array(
            PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES \'utf8\''
        ),
    ),        
);
---------------------------------------------------------------------------------------------------------

Creamos un nuevo controlador:
src/Application/Controler/BasedatosController.php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;

class BasedatosController extends AbstractActionController {

public $dbAdapter;

    public function indexAction()   {
        return new ViewModel();
    }

// ***************************
public function resultAction() {

$this->dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter');
$sql = "select * from tablazend order by id desc";
$result = $this->dbAdapter->query($sql, Adapter::QUERY_MODE_EXECUTE);
$datos = $result->toArray(); // toArray para q lo muestre más formateado
return(new ViewModel(
array(
"titulo"=> "Mi primera conexión zend a base datos usando result",
"datos" => $datos
)
));
}




// ***************************
    public function sqlAction() { // Otra forma: lo mismo que el otro pero con SQL
        $this->dbAdapter=$this->getServiceLocator()->get('Zend\Db\Adapter');
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select()
                      ->from('tablazend')
                      ->where(array('id'=>'2'))
                      ->order('id desc');
        $selectString = $sql->getSqlStringForSqlObject($select);
// echo $selectString;
$result = $this->dbAdapter->query($selectString, Adapter::QUERY_MODE_EXECUTE);
        $datos = $result->toArray();
        return(new ViewModel(
array(
"titulo"=> "Mi primera conexión zend a base datos usando SQL",
"datos" => $datos
)
));
    }
}
--------------------------------------------------------------
Añadir el nuevo controlador a:
application/config/module.config.php:

....
'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController',
            'Application\Controller\Formulario' => 'Application\Controller\FormularioController',
'Application\Controller\Basedatos' => 'Application\Controller\BasedatosController'
        ),

    ),
....
---------------------------------------------------------

Ahora las vistas para esos dos métodos:
view/application/basedatos/result.phtml

<h1><?php echo $this->titulo;?></h1>
<?php
foreach ($this->datos as $registro) {
echo "Id:".$registro["id"]."<br>";
echo "Nombre:".$registro["nombre"]."<br>";
echo "Email:".$registro["email"]."<hr>";
}

?>
view/application/basedatos/sql.phtml
<h1><?php echo $this->titulo;?></h1>
<?php
foreach ($this->datos as $registro) {
echo "Id:".$registro["id"]."<br>";
echo "Nombre:".$registro["nombre"]."<br>";
echo "Email:".$registro["email"]."<hr>";
}

?>
-------------------------------------------------
Para verlo:
http://localhost/zend/zendproyecto8LSG/public/application/basedatos/sql
http://localhost/zend/zendproyecto8LSG/public/application/basedatos/result

Zend Framework: Formularios

FormularioController.php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Application\Form\Formularios;
use Application\Model\Entity\Procesa;

class FormularioController extends AbstractActionController {
    public function indexAction()
    {
        return new ViewModel();
    }
    public function formularioAction()   {
        $form = new Formularios("form");
        return new ViewModel(
array(
"titulo"=>"Formularios en ZF2",
"form"=>$form,
"url"=>$this->getRequest()->getBaseUrl()
)
);
    }

    public function recibeAction() {
        $data = $this->request->getPost();
        $procesa = new Procesa($data);
        $datos = $procesa->getData();
        return new ViewModel(
array(
"datos"=>$datos
)
);
    }

}


module\Application\src\Application\Form\Formularios.php:
namespace Application\Form;
use Zend\Captcha\AdapterInterface as CaptchaAdapter;
use Zend\Form\Element;
use Zend\Form\Form;
use Zend\Captcha;
use Zend\Form\Factory;

class Formularios extends Form {
    public function __construct($name = null)  {
        parent::__construct($name);
     
         $factory = new Factory();
$nombre = $factory->createElement(array(
            'type' => 'Zend\Form\Element\Text',
            'name' => 'nombre',
            'options' => array(
                'label' => 'Escribe tu nombre completo:',
            ),
            'attributes' => array(
                'class' => 'classLSG'
            ),
         ));
        $this->add($nombre);


        $email = $factory->createElement(array(
            'type' => 'Zend\Form\Element\Email',
            'name' => 'email',
            'options' => array(
                'label' => 'Correo',
            ),
            'attributes' => array(
                'class' => 'classLSG'
            ),
        ));
        $this->add($email);

        $this->add(array(
            'name' => 'send',
            'attributes' => array(
                'type' => 'submit',
                'value' => 'Enviar',
                'title' => 'Enviar'
            ),
        ));
     }

}



module\Application\src\Application\Model\Entity\Procesa.php:
namespace Application\Model\Entity;
class Procesa {
    private $nombre;
    private $correo;
    
    public function __construct($datos=array()) {
        $this->nombre = $datos["nombre"];
        $this->correo = $datos["email"];
    }

    public function getData()  {
        $array = array(
"nombre" => $this->nombre,
"email" => $this->correo
);
        return $array;
    }
}

module\Application\view\application\formulario\fomulario.phtml:
<h1><?php echo $this->titulo?></h1>
<?php
$form = $this->form;
$form->prepare();

$form->setAttributes(array(
    'action' => $this->url.'/application/formulario/recibe',
    'method' => 'post'
));

$formLabel = $this->plugin('formLabel');
echo $this->form()->openTag($form);
?>
<div class="form_element">
<?php
    $nombre = $form->get('nombre');
echo $formLabel->openTag().$nombre->getOption('label')." ";
    echo $this->formInput($nombre);
echo $formLabel->closeTag();
?>
</div>

<div class="form_element">
<?php
    $email = $form->get('email');
    echo $formLabel->openTag().$email->getOption('label')." ";
    echo $this->formInput($email);
    echo $formLabel->closeTag();
?>
</div>
<?php 
echo $this->formElement($form->get('send'));
echo $this->form()->closeTag();
?>



module\Application\view\application\formulario\recibe.phtml:
<h1>Recibo los datos</h1>
<ul>
    <li>Nombre : <?php echo $this->datos["nombre"]?></li>
    <li>E-Mail : <?php echo $this->datos["email"]?></li>
</ul>


Para ejecutarlo:
http://localhost/zend/zendproyecto8LSG/public/application/formulario/formulario

Zend Framework: Paso parámetros entre Modelo->Controlador->Vista

En module\Application\src\Application\Model\Entity crear un fichero Modelo1.php:
namespace Application\Model\Entity;
class Modelo1 {
private $idCliente;
private $texto;
private $numeros;

public function __construct($idCliente) {
$this->idCliente = $idCliente;
$this->texto = "Enviando datos desde mi propio modelo";
$this->numeros = array();
}

public function getTexto() {
return($this->texto);
}

private function cargarNumeros() {
$this->numeros = array("123", "234", "345");
}

public function getArray() {
self::cargarNumeros();
return($this->numeros);
}

public function getIdCliente() {
return($this->idCliente);
}
}
--------------------------------------------------
En \module\Application\src\Application\Controller\indexController.php añadimos:
use Application\Model\Entity\Modelo1;

y una nueva función:
public function cargarmodeloAction() {
$modeloAux = new Modelo1("999");
$idCliente = $modeloAux->getIdCliente();
$texto = $modeloAux->getTexto();
$numeros = $modeloAux->getArray();

return new ViewModel(
array(
"idCliente"=>$idCliente,
"texto"=>$texto,
"numeros"=>$numeros
)
);
}
--------------------------------------------------
Y finalmente en \module\Application\view\application\index crear fichero cargarmodelo.phtml:

<h1>Hola de cargarmodelo.phtml</h1>
<h3>IdCliente: <?php echo $this->idCliente;?></h3>
<h3>Valor enviado desde modelo: <?php echo $this->texto;?></h3>
<h3>Números:<br> <?php
foreach ($this->numeros as $key=>$valor) {
echo $valor."<br>";
}
?>
</h3>
-----------------------------------------------------
Para ejecutarlo:
http://localhost/proyectozend/public/application/index/cargarmodelo


Zend Framework: Crear un nuevo módulo

En config/application.config.php:
 'modules' => array(
        'Application',
        'Modnuevo'
    ),

Ir a /module y duplicar la carpeta Application, a la nueva carpeta llamarla Modnuevo

module\Modnuevo
namespace Modnuevo;

Modnuevo/config/module.config.php:
'invokables'=>array(
            'Modnuevo\Controller\Modnuevo'=>'Modnuevo\Controller\ModnuevoController'
...
'routes'=>array(
            'modnuevo'=>array(
                 'type'=>'Segment',
                    'options'=>array(
                        'route' => '/modnuevo[/[:action]]',
                        'constraints' => array(
                                'action'  =>  '[a-zA-Z][a-zA-Z0-9_-]*',
                        ),
                        'defaults'  =>  array(
                                'controller' => 'Modnuevo\Controller\Modnuevo',
                                'action'     => 'index'
                        ),
                    ),
           ),
       ),
...
'template_map' => array(
           'modnuevo/index/index' => __DIR__ . '/../view/modnuevo/index/index.phtml',


module/Modnuevo/src/Modnuevo/Controller/ModnuevoController.php:
namespace Modnuevo\Controller;
...
class ModnuevoController extends...

module\Modnuevo\view\modnuevo\modnuevo\index.phtml
<h1>Mi primer modulo creado por mi</h1>

module\Leandro\view\layout\layout.phtml
<?php echo $this->doctype(); ?>
<html lang="es_ES">
    <head>
        <?php echo$this->headMeta()->setCharset('utf8')?>
        <?php echo $this->headTitle($this->valor)?>
        <?php echo $this->headLink()->prependStylesheet($this->basePath().'/css/estiloLSG.css')?>
        <?php echo $this->headStyle()?>
        <?php echo $this->headScript()->prependFile($this->basePath().'/js/jquery.min.js')?>
    </head>
    <body>
        <div class="header">aa</div>
        <div class="content"><?php echo $this->content?></div>
        <div class="footer">footer</div>
        <?php echo $this->inlineScript() ?>
    </body>
</html>






Zend Framework: Layouts

Guardar nuestro propio código:
en /public/css nuestras hojas de estilo
en /public/js nuestros js
----------------------------------------------------------------
Creamos un controlador nuevo:
class TrabajoController extends AbstractActionController {
    public function indexAction()    {
$view = new ViewModel();

$this->layout()->titulo = "Titulo LSG";
$this->layout()->saludo = "saludo enviado desde el controlador";

$this->layout('layout/trabajo');  // La vista que queremos que cargue
        return $view;
    }
}
------------------------------------------------------------------
Siempre que se cree un nuevo controlador hay que añadirlo en \module\Application\config\module.config.php

'Application\Controller\Trabajo' => 'Application\Controller\TrabajoController'
----------------------------------------------------
Se crea nuestro html en \view\application\trabajo\index.phtml:
<h1>Este será el contenido principal de esta vista de zendproyecto4 de LSG</h1>
---------------------------------------------------

En module/Application/view/layout/trabajo.phtml:
<?php echo $this->doctype(); ?>
<html lang="es_ES">
    <head>
        <?php echo $this->headMeta()->setCharset('utf8')?>
        <?php echo $this->headTitle($this->titulo)?>
     
        <?php echo $this->headMeta()->appendName('keywords', 'framework, PHP, productivity');?>
        <?php echo $this->headMeta()->setProperty('og:title', 'my article title');?>
        <?php echo $this->headMeta()->setProperty('og:type', 'article');?>
        <?php echo $this->headLink()->prependStylesheet($this->basePath().'/css/estiloLSG.css')?>
        <?php echo $this->headStyle()?>
        <?php echo $this->headScript()->prependFile($this->basePath().'/js/jquery.min.js')?>
    </head>
    <body>
        <div class="header">Encabezado</div>
     
        <div class="content">
        <h1>Saludo : <?php echo $this->saludo?></h1>
        <?php
        // this->content muestra lo que haya en nuestro HTML creado en \view\application\trabajo\index.phtml
        echo $this->content;
        ?>
        </div>
        <div class="footer">footer</div>
        <?php echo $this->inlineScript() ?>
    </body>
</html>
------------------------------------------------------

Zend Framework

Lo primero descargarse la última versión full disponible de:
http://framework.zend.com/downloads/latest

Por ejemplo la Zend Framework 1.12.7 Full

Descomprimir el Zip en wamp/www

Ahora cambiar las variables del entorno para poder ejecutar proyectos desde cualquier sitio:

En el caso de Windows 7:
Equipo (bton derecho) -> Propiedades -> Configuración Avanzada del sistema -> Opciones avanzadas -> Variables de Entorno

Añadir a PATH (o crearla si no existe):
D:\wamp\bin\php\php5.4.3;D:\wamp\www\zend1_127\bin;

Así ya podemos desde cualquier parte de la consola del sistema ejecutar las instrucciones de Zend para crear proyectos, como por ejemplo:

zf show versión 

Más información en:
http://aprendiendophp5.blogspot.com.es/2012/01/zendframework-0.html

OTRA FORMA: a) Descargar de: https://github.com/zendframework/ZendSkeletonApplication b) Descomprimir el fichero c) Abrir la consola (CMD) e irse al directorio y ejecutar: php composer.phar self-update php composer.phar install Si diese problema de conexion SSL hay que modificar el PHP.INI (tanto el del WAMP como el que está en wamp\bin\php\...) descomentando extension=php_openssl.dll. También tienes que activar el módulo de Apache: ssl_module d) Una vez instalado todo ya te vas a la carpeta public/ del framework creado y te cargará la página por defecto. Más información en:
www.cesarcancino.com/categorias/detalle/zend-framework

----------------------------------------------

CREAR APLICACION
a) En \module\Application\src\Application\Controller duplicar uno que ya exista de antes, por ejemplo: TrabajoControler.php, y dentro del fichero cambiar a:
    class TrabajoController extends ....

b) En \module\Application\config\module.config.php añadir en controllers:
'Application\Controller\Trabajo' => 'Application\Controller\TrabajoController'

c) En \module\Application\view\layout duplicar uno que ya exista de antes, por ejemplo: trabajo.phtml

d) En \module\Application\view\application\trabajo crear el html de la página, por ejemplo:
<h1>Hola mundo</h1>