Вы находитесь на странице: 1из 9

Alumna: Hilda Calva Prez.

Asignatura: Tecnologa y aplicaciones web.


Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.

Estructura bsica del mdulo Zend


ESTRUCTURA

<module
<HolaMundo>
<config>
module.config.php
<src>
<HolaMundo>
<Controller>
IndexController.php
<Model>
HolaMundo.php
<view>
<error>
404.phtml
index.phtml
<holamundo>
<index>
index.phtml
<layout>
layout.phtml
module.php



Crear el controlador
Vamos a crear el
controlador IndexController.php enmodule/HolaMundo/src/HolaMundo/Controller. Antes
de entrar en el cdigo, vamos a resumir lo que haremos en todo este artculo. Crearemos un
controlador que ser invocado al acceder a travs del navegador web. Luego, este controlador
acceder a un modelo que devolver el mensaje Hola Mundo!. A continuacin, ese mensaje se
le pasar a la vista y all se imprimir.
Ahora s, veamos qu tiene nuestro controlador:








<?php
namespace HolaMundo\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use HolaMundo\Model\HolaMundo;

class IndexController extends AbstractActionController
{
Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.










public function indexAction(
{
$holaMundo = new HolaMundo();

$data = array(
'saludo' => $holaMundo->getSaludo(),
);

return new ViewModel($data);
}
}
Crear el modelo
Ahora veamos el modelo, cuyo nombre es HolaMundo.php y la
ubicacinmodule/HolaMundo/src/HolaMundo/Model/










<?php

namespace HolaMundo\Model;

class HolaMundo
{
public function getSaludo()
{
return 'Hola Mundo!';
}
}
Se aade arriba el namespace y luego se crea una clase comn y corriente de PHP. Nuevamente
el mtodo es pblico y cmo podemos apreciar, no hace mucho. Simplemente devuelve el
mensaje que luego mostraremos.
Crear la vista
La vista se compone de varios archivos. Los vinculados a errores, que se encuentran
enmodule/HolaMundo/view/error, es decir, index.phtml y 404.phtml, pueden ser tomados de
la aplicacin esqueleto. En este ejemplo no sern necesarios en realidad, pero es recomendable
tenerlos por si cometemos un error al crear nuestro mdulo.
El archivo layout.phtml, que se encuentra en module/HolaMundo/view/layout es el que
tendr la estructura bsica en HTML.







<?php echo $this->doctype(); ?>
<html>
<head>
<title>Hola Mundo! en Zend Framework 2</title>
</head>
<body>
<h1>Zend Framework 2</h1>
Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.




<?php echo $this->content; ?>
</body>
</html>
Este archivo HTML ser el primero en cargarse luego del controlador. La primera lnea sirve
para cargar el doctype. Luego, en $this->content estar el contenido de nuestro controlador as
que lo mostramos por medio de echo. Ya veremos cmo es que se vincula el controlador con la
vista.
En module/HolaMundo/view/HolaMundo/index se encuentra el archivo index.phtml que tiene
la vista particular vinculada a la accin.


<h2><?php echo $this->saludo; ?></h2>

Configuracin en module.config.php
En la ruta HolaMundo/config hay un archivo muy importante de configuracin del
mdulo:module.config.php. Se podra dedicar un artculo entero a este archivo, pero para este
caso vamos a simplificar el asunto. Tomaremos el archivo original de la aplicacin esqueleto y
lo copiaremos a nuestro mdulo. All le haremos algunas modificaciones y eliminaremos
muchas lneas de cdigo hasta dejarlo de la siguiente manera.


return array(
'router' => array(
'routes' => array(

'holamundo' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/holamundo',
'defaults' => array(
'controller' => 'HolaMundo\Controller\Index',
'action' => 'index',
),
),
),
),
),
'service_manager' => array(
'abstract_factories' => array(
'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
'Zend\Log\LoggerAbstractServiceFactory',
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
),
'controllers' => array(
'invokables' => array(
Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.



'HolaMundo\Controller\Index' => 'HolaMundo\Controller\IndexController'
),
),
'view_manager' => array(
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'hola-mundo/index/index' => __DIR__ . '/../view/holamundo/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
),
'template_path_stack' => array(
__DIR__ . '/../view',
),
),
// Placeholder for console routes
'console' => array(
'router' => array(
'routes' => array(
),
),
),
);

Archivo de configuracin Module.php
No vamos a modificar casi nada de este archivo. As que lo copiaremos directamente de la
aplicacin esqueleto y le modificaremos el namespace para adaptarlo a nuestro mdulo.

namespace HolaMundo;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module
{
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.


public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}

public function getAutoloaderConfig()
{

return array(
'Zend\Loader\StandardAutoloader' => array
'namespaces' => array
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
}

Desactivar aplicacin esqueleto y activar el mdulo
creado
A continuacin le vamos a indicar al framework qu mdulos estarn activos. El que se vincula
a la aplicacin esqueleto ser desactivado y el que hemos creado, activado. Para realizar este
procedimiento hay que modificar el archivo application.config.php que se encuentra en config,
pero del directorio principal de la aplicacin, fuera de la estructura de nuestro mdulo.
Lo que podemos hacer es buscar el principio del archivo donde se muestran los mdulos
activos

'modules' => array(
'Application',
),
Y cambiarlo por:

'modules' => array(
'HolaMundo',
),

Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.


),

Ahora Zend si tendr en cuenta de que hay un nuevo mdulo en el proyecto, ejecuta en el
navegadorhttp://tutorial-zend.localhost/administracion/ y sorpresa un nuevo mdulo ha sido creado.



Extendiendo Zend Framework 2 Form.
<?php
//File :
App_folder/module/Module_name/src/Module_name/Form/ExtendedForm.php
namespace Application\Form;
use Zend\Form\Form;

class ExtendedForm extends Form {
protected $_name;
protected $_rawElements = array();
public function __construct($name = null) {
parent::__construct($name);

}
public function isValid($request = null) {
$this->__addValidator();
if ($request -> isPost()) {
$query = $request -> getQuery();
$query = is_object($query) ? $query->toArray() : $query;
$post = $request -> getPost();
foreach($post as $var=>$value){
$query[$var] = $value;
}
$this -> setData($query);
return parent::isValid();
} else {
return false;
}
}
public function add($elementOrFieldset, array $flags = array()) {
$form = parent::add($elementOrFieldset, $flags);
$this->_rawElements[] = $elementOrFieldset;
return $form;
}
private function __addValidator() {
$this -> setInputFilter(new ExtendedFormValidator($this-
>_rawElements));
}




Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.



//File :
App_folder/module/Module_name/src/Module_name/Form/ExtendedFormValidator.
php
namespace Application\Form;
use Zend\InputFilter\InputFilter;

class ExtendedFormValidator extends InputFilter {

public function __construct($elements) {
foreach ($elements as $element) {
if (is_array($element)) {
if (isset($element['type'])) {
unset($element['type']);
}
$this -> add($element);
}
}
}


Creacin de Zend Framework 2 Form Validator
//File :
App_folder/module/Module_name/src/Module_name/Form/ExtendedFormValidator.
php
namespace Application\Form;
use Zend\InputFilter\InputFilter;

class ExtendedFormValidator extends InputFilter {

public function __construct($elements) {
foreach ($elements as $element) {
if (is_array($element)) {
if (isset($element['type'])) {
unset($element['type']);
}
$this -> add($element);
}
}
}

}

Creacin sencilla Formulario Zend Framework 2 y extendindolo con ExtendedForm
//File :
App_folder/module/Module_name/src/Module_name/Form/ResendPassword.php
namespace Application\Form;

class ResendPassword extends ExtendedForm
{
public function __construct($name = null)
Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.

{

parent::__construct('login');
$this->setAttribute('method', 'post');

$this->add(array(
'required'=>true,
'name' => 'usermail',
'type' => 'Zend\Form\Element\Text',
'options' => array(
'label' => 'Email',
),
'filters'=>array(
array('name'=>'StripTags'),
array('name'=>'StringTrim'),
),
'validators'=>array(
array('name'=>'EmailAddress')
),

));

$this->add(array(
'name' => 'submit',
'type' => 'Zend\Form\Element\Text',
'attributes' => array(
'type' => 'submit',
'value' => 'Submit',
'id' => 'submitbutton',
),
));
}
}

Crear instancias de la Forma de Zend Framework 2.
//File :
App_folder/module/Module_name/src/Module_name/Controller/IndexController.
php
use Application\Form as Form; //at the top of the file.

public function forgotAction(){

$form = new Form\ResendPassword();
if($form->isValid($this->getRequest())){
//do your magic
}
return new ViewModel(array('form'=>$form));
}

Representacin de Zend Framework 2 Form en la vista.
//File : App_folder/module/Module_name/View/Module_name/index/index.phtml
$form = $this->form;
Alumna: Hilda Calva Prez.
Asignatura: Tecnologa y aplicaciones web.
Tarea: Estructura bsica del mdulo Zend
e instrucciones para crear un formulario.

$form->prepare();

echo $this->view->form()->openTag($form) . PHP_EOL;
$elements = $form->getElements();
foreach($elements as $element){
echo $this->view->formRow($element) . PHP_EOL;
}
echo $this->view->form()->closeTag($form) . PHP_EOL;