Zend 1.9 usando Eclipse Galileo – Segunda página

Primero y para ahorrarnos tiempo abrimos una ventana de comandos, tener en cuenta que si tu Sistema es Windows 7 , debes dar clic derecho en el programa y seleccionar “Ejecutar como Administrador”.

Luego nos ubicamos en la carpeta donde el servidor Apache acceda a las páginas, para este caso como se usa Xampp , la ubicación es “c:\xampp\htdocs”, pero como vamos a crear el proyecto en una carpeta llamada test , nos ubicamos en ella e ingresamos el comando :

c:\xampp\php>zf.bat create project /test/Zend02

El programa al finalizar mostrara el mensaje :

"Creating project at C:/xampp/htdocs/test/Zend02"

Luego abrir Eclipse

Crear un Nuevo Proyecto PHP : File ->New-> PHP Project

En la pantalla New PHP Project en Project Name poner “Zend02” y dar clic en Next.

En la pantalla Configure PHP Include Path, dejar tal cual y dar clic en Next.

En la pantalla Configure PHP Build Path, dejar tal cual y dar clic en Finish.

Listo ahora nos hemos ahorrado un monton de tiempo, solo para descubrir que :

1. La estructura de directorios es diferente : ya no hay web_root, sino que hay 2 directorios : public y tests.

2. En el directorio library no esta Zend.

3. Ahora ya no sabemos donde esta el punto de entrada y cómo se configura.

La buena noticia es que esta configuracion tambien funciona, asi que como en todo proceso de desarrollo hay que comenzar otra vez de cero :).

Para ver que la aplicación funciona dar clic derecho en public->index.php y seleccionar “Run As”, luego configurar la ruta de nuestra nueva aplicacion al igual como se hizo con la anterior para que quede asi :

http://localhost/test/Zend02/public/index.php

Al dar clic al botón Run, se cargara el browser con la página por defecto generada por la utilidad zf.

Ahora a recuperar momentaneamente la conciencia.

Bien, el objetivo de esta segunda aplicación es simplemente crear una nueva página que muestre el resultado de multiplicar la variables $a =3 y $b=2.5, esto desde luego seria el resultado de llamar a una función que llamaremos multiaxb.

Opción 1

Entonces , según el funcionamiento de Zend , esta función que pertenece a la parte lógica del proyecto deberá estar dentro de un controlador, es decir dentro del directorio :

application\controllers

Asi que en este directorio crearemos MultiaxbController.php .

De acuerdo a Zend que indica que este archivo para ser considerado un controlador deberá tener una clase con el mismo nombre del archivo y heredar de Zend_Controller_Action, se adicionaran los atributos de clase $a y $b, luego se pondrá la funcion multiaxb y el archivo quedara asi :

<?php
class MultiaxbController extends Zend_Controller_Action{
    var $a;
    var $b;
    public function multiaxb(){
        $this->a=3;
        $this->b=2.5;
        return $this->a*$this->b;
    }
}
?>

Pero para que esta sea una clase controladora, debe tener una función que tenga el mismo nombre que la clase seguido de “Action”, entonces el código que se agregará sera :

public function multiaxbAction(){
    $this->view->assign('res',$this->multiaxb());
}

Aqui ya estamos usando la funcion multiaxb ,cuyo resultado esta asignado a la variable “res” en el objeto view de la clase.

Luego esta variable “res” tiene que ir a algún lugar , y ese lugar es una plantilla cuyo nombre para este ejemplo sera multiaxb.phtml, que estara en un directorio con el mismo nombre en la sgte ruta : application\views\scripts , en el cual podremos poner una plantilla de una página con flash si queremos, pero en la cual se podra acceder a las variables de su controlador , para una mayor seguridad se usara la funcion escape(), que evita ataques de Cross-Site Scripting (XSS).

<title>Pagina de Zend02</title>
El resultado de la funcion multiaxb con a = 3 y b = 2.5 es : <?php  this->escape($this->res);?>

Hay que notar lo siguiente :

Cuando la clase Zend_Controller transforma el url que le hemos dado sea :

http://localhost/test/Zend02/public/
http://localhost/test/Zend02/public/index
http://localhost/test/Zend02/public/index.php

Buscará la función indexAction en la Clase IndexController en el directorio controllers.

En este ejemplo para acceder a nuestra acción creada ingresaremos en el Browser :

http://localhost/test/Zend02/public/multiaxb/multiaxb

lo que hará que Zend_Controller busque la funcion multiaxb en la Clase MultiaxbController en el directorio controllers.

Tener cuidado, al crear la clase, no es recomendable dejarla sin la acción index, que equivale a decir que no le debe faltar la funcion indexAction, así que al poner esta url :

http://localhost/test/Zend02/public/multiaxb/

Se mostrará una pantalla de página no encontrada.

Para solucionarlo realizar todos los pasos para crear la acción (Mas no el controlador ), esto hará que esa url tenga página, mas con este código no podrá ser mostrada otra página en su lugar, es decir el siguiente codigo :

public function indexAction(){
    $this->multiaxbAction();
}

sólo mostrará la página index basada en la plantilla index.phtml que esta en views\scripts\multiaxb, asi que da lo mismo quitar la linea resaltada.

Y voila , nuestra segunda emoción de esta peripecia.

Para terminar se debe ingresar los nombres de los nuevos controladores, views y acciones en el archivo .zfproject.xml

Si queremos automatizar el proceso de creacion de acciones con la herramienta zf, el archivo .zfproject.xml debe estar correctamente actualizado.

Si usamos el comando :

C:\xampp\htdocs\test\Zend02>c:\xampp\php\zf create action add multiaxb 1

Sin registrar al controlador, sus acciones y sus vista en .zfproject.xml es :

Fatal error: Call to a member function search() on a non-object in  C:\xampp\php\PEAR\ZendTool\ProjectProviderAction.php on line 92

Es decir no se encuentra el controlador .

Opción 2 :

Podemos usar el siguiente comando con la utilidad zf:

zf create action nombreAccion NombreControlador

Para eso debemos ubicarnos en el directorio del proyecto con la ventana de comandos (como Administrador en Windows 7).

y luego ingresar el comando con los parametros Correctos.

Para crear un controlador :

Si queremos tener un controlador llamado sumaaxb (en minúsculas ) el comando es  con 1 al final que indica que tambien se creara su respectiva plantilla de vista:

C:\xampp\htdocs\test\Zend02>c:\xampp\php\zf create controller sumaaxb 1

Lo que mostraró el siguiente procesamiento :

Creating a controller at  C:\xampp\htdocs\test\Zend02/application/controllers/SumaaxbController.php
Creating an index action method in controller sumaaxb
Creating a view script for the index action method at  C:\xampp\htdocs\test\Zend02/application/views/scripts/sumaaxb/index.phtml
Creating a controller test file at  C:\xampp\htdocs\test\Zend02/tests/application/controllers/SumaaxbControllerTest.php
Updating project profile 'C:\xampp\htdocs\test\Zend02/.zfproject.xml'

Para crear una acción de nombre add en el controlador recién creado (en minúsculas ), le ponemos 1 al final para que cree la plantilla vista de esa acción.

C:\xampp\htdocs\test\Zend02>c:\xampp\php\zf create action add sumaaxb 1

Que mostrará la salida :

Creating an action named add inside controller at C:\xampp\htdocs\test\Zend02/application/controllers/SumaaxbController.php
Updating project profile 'C:\xampp\htdocs\test\Zend02/.zfproject.xml'
Creating a view script for the add action method at  C:\xampp\htdocs\test\Zend02/application/views/scripts/sumaaxb/add.phtml
Updating project profile 'C:\xampp\htdocs\test\Zend02/.zfproject.xml'

Esto ingresara los siguientes cambios en el archivo .zfproject.xml. Este archivo no se puede editar desde el eclipse, pero se puede hacer con cualquier editor.

Para los controladores

<controllersdirectory>
<controllerfile controllername="index">
<actionmethod actionname="index">
</actionmethod></controllerfile>
<controllerfile controllername="error">
<controllerfile controllername="sumaaxb">
<actionmethod actionname="index">
<actionmethod actionname="add">
</actionmethod></actionmethod></controllerfile>
</controllerfile></controllersdirectory>

Para las vistas

<viewscriptsdirectory>
<viewcontrollerscriptsdirectory forcontrollername="index">
<viewscriptfile foractionname="index">
</viewscriptfile></viewcontrollerscriptsdirectory>
<viewcontrollerscriptsdirectory forcontrollername="error">
<viewscriptfile foractionname="error">
</viewscriptfile></viewcontrollerscriptsdirectory>
<viewcontrollerscriptsdirectory forcontrollername="sumaaxb">
<viewscriptfile foractionname="index">
</viewscriptfile></viewcontrollerscriptsdirectory>
<viewcontrollerscriptsdirectory forcontrollername="sumaaxb">
<viewscriptfile foractionname="add">
</viewscriptfile></viewcontrollerscriptsdirectory>
</viewscriptsdirectory>

Ahora probar el funcionamiento de las acciones

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s