Por favor, haz un clic sobre los anuncios cuando pases por mi blog, ya? =)

Zend Framework 4: Controladores y acciones

15 comentarios
Este artículo es parte de mi tutorial de Zend Framework, y es la continuación de la parte 3.

Creando nuevas acciones

 Ahora, como creamos una nueva accion en nuestro controlador index? Pues simple, se hace con un comando usando el zf.bat. Pero lo podemos hacer desde el mismo IDE.
Primero, le vamos a asignar a los comandos de ZF un hotkey para poder ejecutarlos más rápido.
Vamos en el menú a Herramientas/Opciones a la pestaña Keymap (o mapeo de teclas o como aparezcan en español), y teclea en Buscar 'zend' (sin las comillas)
 Clic en la segunda columna, presiona la tecla Alt y la tecla z (Alt+Z) y Enter. Guarda los cambios.

Ahora, si presionamos Alt+z en la ventana principal del IDE, aparecerá


ese es el listado de todos los comandos de zend.bat disponibles. Para usarlos, hacemos clic en uno de ellos, colocamos en Parámetros los datos requeridos y presionamos el botón Run (ejecutar) o enter.



Para crear una nueva acción

Crearemos una nueva acción en mi controlador index.
Presionemos Alt+z para ejecutar un comando de ZF. Cuando se abra la ventana, en filtro escribamos 'act' sin comillas, seleccionamos el comando create action y escribimos
'prueba index' y presionamos enter. (esto llama al comando zf create action prueba index)

como se ve en la imagen:



Si vemos nuestro archivo
/application/controllers/IndexController.php

veremos que ahora contiene

class IndexController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
    }

    public function pruebaAction()
    {
        // action body
    }
}

Y también veremos que se ha creado un archivo llamado prueba.phtml en
/application/views/scripts/index/prueba.phtml

Nota: como podemos ver, las paginas .phtml se guardan en
/application/views/scripts/nombre_controlador/nombre_accion.phtml

Abramos el archivo
/application/views/scripts/index/prueba.phtml

borra su contenido y escribe

<h1>Estoy en la vista de la accion prueba()</h1>


Ahora, abriremos esa página por el navegador
recordemos que la forma de abrirla es

http://localhost/miproyecto/public/nombrecontrolador/nombreaccion

en este caso, seria
http://localhost/miproyecto/public/index/prueba

veamos cómo quedó:

ahora, cómo agregamos un nuevo controlador?

Agregando un nuevo controlador


Presionemos Alt+z para ejecutar un comando de ZF. Cuando se abra la ventana, en filtro escribamos 'cont' sin comillas, seleecionamos el comando create controller y escribamos
'micontrolador' y presionamos enter. (esto llama al comando zf create controller micontrolador)

como se ve en la imagen:


Ahora, su revisamos la carpeta de los controladores,
/application/controllers/
veremos que se ha agregado el archivo MicontroladorController.php con la acción index():

class MicontroladorController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
    }
}

Y si vamos a donde se guardan los archivos .phtml, veremos que se ha agregado una nueva carpeta con el nombre del controlador, y un nuevo archivo en
/application/views/scripts/micontrolador/index.phtml

Ahora, apuntemos el navegador a nuesto nuevo controlador:
http://localhost/miproyecto/public/micontrolador
ó
http://localhost/miproyecto/public/micontrolador/index

veremos esto:

Ahora mostraremos como pasar datos desde la accion a la vista, es decir, desde la funcion index() de Micontrolador al archivo /application/views/scripts/micontrolador/index.phtml:

Vamos al archivo  MicontroladorController.php y modificaremos algunas cosas:
class MicontroladorController extends Zend_Controller_Action
{

    public function init()
    {
       //creamos un objeto vista, para pasarle los datos
    //al archivo .phtml en cada accion 
      $this->initView();
        $this->view->baseUrl = $this->_request->getBaseUrl();
    }

    public function indexAction()
    {
        //creo una variable llamada saludo en el objeto vista
        //y le asigno un string
        $this->view->saludo = "hola a todos!!";
    }
}

Ahora, haremos unas modificaciones en la vista, es decir, el archivo index.phtml. Podemos buscar el archivo entre las carpetas del proyecto, o hacer clic dentro de la funcion indexAction(), boton derecho, Go to View (ir a la Vista)


esto me traslada inmediatamente a la vista asociada a la accion , en este caso, el archivo /application/views/scripts/micontrolador/index.phtml

Nota: si desde index.phtml haces boton derecho Navigate/Go to Action, te llevará a la acción  asociada a la Vista.

Reemplazaremos su contenido por:
<p>Vista index de la accion index() de controlador Mi controlador</p>
<p>Saludo : <strong><?php echo $this->saludo; ?></strong></p>

Ahora, apuntemos el navegador nuevamente al controlador:
http://localhost/miproyecto/public/micontrolador



Como podemos ver, la variable
$this->view->saludo = "hola a todos!!";
que asignamos en la accion se muestra en la vista haciendo
saludo; ?>

Así, cualquier cosa que asignemos a $this->view en la acción puede ser mostrada en la vista.

Te aconsejo practicar creando algunos controladores y acciones y pasando datos desde la acción a la vista usando $this->view, para que vayas soltando la mano.

Zend Framework ofrece muchas otras herramientas para facilitar el desarrollo del sistema. Entre ellas están el manejo sesiones, de privilegios de usuario, de parámetros, y la que veremos en la siguiente parte de este tutorial, el acceso a bases de datos: el Modelo.

Pasemos al siguiente artículo de este tutorial.

15 comentarios :

Anónimo dijo...

Nuevamente yo angel otra ayuda lo que pasa es que yo estoy usando la version 1.10.8 creo que es diferente si me podes ayudar por que en el tuyo indica el del
zen específicamente esta parte lo que me refiero

Vamos al archivo MicontroladorController.php y modificaremos algunas cosas:
la verdad ni idea con esto si me podrías ayudar esto me sale a mi entiendo que me pide instalar el phpunit? como hago.. ¿oh esto no importa?

require_once 'PHPUnit/Framework/TestCase.php';

class MicontroladorControllerTest extends PHPUnit_Framework_TestCase
{

public function setUp()
{
/* Setup Routine */
}

public function tearDown()
{
/* Tear Down Routine */
}


}

Saludos

Angelorum dijo...

Cuando haces clin con el botón derecho, tienes que ir a GO TO VIEW (ir a vista)

tú hiciste clic en GO TO TEST, y por eso llegaste a esa clase 'extraña' XD

Anónimo dijo...

Buenas tardes muy buena guía.
Tengo un problema, cuando ingreso a:

http://localhost/miproyecto/public/index/prueba

me aparece lo siguiente:
Objeto no encontrado!

El enlace requerido no ha sido localizado en este servidor. Si usted proporcionó el enlace de manera manual le solicitamos que por favor revise los datos e intentelo de nuevo.

Por favor contacte con el webmaster en caso de que usted crea que existe un error en el servidor.

cuando miro los directorios, veo que dentro de public no hay un directorio index como lo estoy poniendo en la url, ni tampoco el archivo prueba.

si podes aclararme esta duda voy a estar muy agradecido.
Gracias por tu tiempo

Anónimo dijo...

Buenisimo todos tus post, ya le estoy agarrando el hilo a Zend. XD

Anónimo dijo...

Muy bueno todo!!! gracias por la explicación!!

Anónimo dijo...

Hola blogero, te felicito y te doy las gracias. Tu tuto es directo y sin mucho rodeo intelectual (teoria). Te cuento que yo intentaba crear los controles como si fuera crear nuevo archivo. Pero mirando tu tuto vi que hacerlo por comando te evitas de muchas cosas (sobre todo en el xml)

Soy nuevo en zend, ahora tengo una inquietud, existe algun comando para eliminar los controles, intente eliminar uno creado (SUPR) pero fijandome en el zfproject.xml aun esta nombrado.

Angelorum dijo...

Hola, Anonimo.
No, no existe ningun comando para borrar ni controladores ni acciones, ni clases del modelo ni forms, ni nada que se cree con los comandos de ZF.

Lo unico que se puede hacer es borrar el archivo "a mano", y borrar su referencia en el .zfproject.xml

Tambien en un momento estuve buscando uno.

Saludos

Anónimo dijo...

Ok muchas gracias por contestar. Y espero que te animes hacer un tuto usando librerias de interfaz con Dojo u otro. No importa si es basico.
Igual Gracias!

Anónimo dijo...

hola disculpa una pregunta como puedo partir mi index normal que tengoo en html a diferentes vistas en zend, como puedo jalar varias vistas y que se muestren en una misma pagina.

Joandri_03 dijo...

Sabes tengo el mismo problema que presentan en un comentario anteriror... Cuando quiero acceder a http://localhost/prueba/public/index/prueba el navegador me dice que no ha encontrado el objeto... Supongo que es por redireccion... Quisiera saber cual es el problema y como puedo solucionarlo.

Te agradeceria de ante mano..

Anónimo dijo...

Hola muy buen tutorial, tengo una pregunta para hacer lo de la tecla alt+z lo hace pero cuando cargo los comandos no salen :S me marca algun error O__o

Anónimo dijo...

Hola, tengo este problema, ojala me puedas ayudar, es al momento de querer mostrar el saludos en mi vista, he seguido exactamente todos los pasos enseñados. El problema es:
Vista index de la accion index() de controlador Mi controlador

Saludo :
Fatal error: Using $this when not in object context in C:\xampp\htdocs\holaMundo\application\views\scripts\micontrolador\index.phtml on line 5

Angelorum dijo...

Creo que estás usando "$this" pero no estas dentro de un objeto. Esto es mas un error de concepto de POO que de ZF.
Tal vez esto te ayude

http://stackoverflow.com/questions/3393996/zend-framework-view-script-functions-and-variable-scope

Saludos

Anónimo dijo...

Gracias por tutorial muy bueno, mi duda es la siguiente, en rum no me da con alt+z pero si se puede con alt+l, no se si el error esta en esta, cuando realizo lo que indica el tutorial me sale lo siguiente. en la pantalla con firefox.

Not Found

The requested URL /miproyecto/public/micontrolador/index.php was not found on this server.

podrias indicarme dondfe esta la falla.

gracias

Unknown dijo...
Este comentario ha sido eliminado por el autor.