¿Cómo renderizar una página en zend framework 2?

Usé el siguiente código para representar una página en la acción del controlador.

public function userinforeceiveAction()
{   
    $renderer = new PhpRenderer();

    $map = new Resolver\TemplateMapResolver(array(
    'userinfo' => __DIR__ . '/userinfo.phtml',
        ));

        $resolver = new Resolver\TemplateMapResolver($map);
        $renderer->setResolver($resolver);
        $model = new ViewModel();
        $model->setTemplate('userinfo');

        return new ViewModel();    
}

y hago eco del contenido de renderizado en la vista.

echo $renderer->render($model);

pero no rinde nada. Por favor, ayúdame. Gracias. y también su buen trabajo con zf1 por estas dos líneas.

$this->userinfoAction();
$this->$render('userinfo');

preguntado el 03 de mayo de 12 a las 08:05

3 Respuestas

Si está utilizando la capa ZF2 MVC, no necesita crear una instancia de su propia representación de vista, solo devuelva una instancia de ViewModel y se encargará del resto:

public function userinforeceiveAction()
{
    $vm = new ViewModel();
    $vm->setTemplate('userinfo');
    return $vm;
}

Para ver un ejemplo de cómo usar modelos de vista, consulte ZF2TestApp de Akrabat: http://zf2test.akrabat.com/

El código ZF2 asociado está vinculado en la parte inferior de esa página y el mapa de plantilla está configurado en el archivo de configuración del módulo

Respondido el 27 de junio de 12 a las 13:06

En realidad, lo que has hecho debería funcionar con los siguientes cambios mineros.

public function userinforeceiveAction()
{   
    $renderer = new PhpRenderer();

    $map = new Resolver\TemplateMapResolver(array(
    // first mistake
    // __DIR__ is the directory of application controller, not the path of views 
    // second mistake
    // 'userinfo' should be '(controller)/(action)'
    'userinfo' => __DIR__ . '/userinfo.phtml',
        ));

        // third mistake
        // since $map is a resolver instance, this is wrong
        $resolver = new Resolver\TemplateMapResolver($map); // no need
        $renderer->setResolver($resolver);
        // should be $renderer->setResolver($map);
        $model = new ViewModel();
        // 'userinfo' should be changed
        $model->setTemplate('userinfo');

        // big mistake
        // what you are returning here is new instance of view model
        return new ViewModel();
        // instead you should return $model 
}

No hay necesidad de esta línea dentro de la vista.

echo $renderer->render($model);

Pero la forma mejor y recomendada es inyectar a través del archivo de configuración del módulo, como Adam dicho

La documentación dará una mejor explicación

contestado el 23 de mayo de 17 a las 11:05

Es posible que desee echar un vistazo a la aplicación de esqueleto sobre cómo renderizar cosas en un entorno MVC.

Principalmente lo estás haciendo de la manera correcta. Pero, ¿por qué está creando un renderizador y un resolutor sin usarlo? ¿Supongo que establecer una estrategia de renderizado y las plantillas? Eso no se debe hacer en un controlador sino en la configuración de su aplicación/módulo.

Por otro lado, no repite el resultado del renderizador en su vista: el renderizador devuelve el resultado de su (s) vista (s) que luego su aplicación repite (no lo hace usted mismo).

contestado el 03 de mayo de 12 a las 09:05

puedes ayudar en algo mas No entendí mucho. - Mangala Edirisinghe

Debería ser un poco más específico en sus preguntas y leer la documentación y ejecutar y probar la aplicación básica. - Fge

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.