web-dev-qa-db-fra.com

désactiver la vue en action dans ZF2

Je ne parviens pas à désactiver l'affichage de ZF2 $this->_helper->viewRenderer->setNoRender(); or (true) sans succès, comme il est toujours indiqué

PHP Fatal error:  Call to a member function setNoRender() on a non-object in ../module/Location/src/Location/Controller/LocationController.php on line 190
20
mahi

Pour désactiver complètement la vue, depuis une action du contrôleur, vous devez retourner un objet Response:

<?php

namespace SomeModule\Controller;

use Zend\Mvc\Controller\ActionController,
    Zend\View\Model\ViewModel;

class SomeController extends ActionController
{
    public function someAction()
    {
        $response = $this->getResponse();
        $response->setStatusCode(200);
        $response->setContent("Hello World");
        return $response;
    }   
}

Pour désactiver la présentation et restituer le modèle de modèle de vue de cette action, procédez comme suit:

public function anotherAction()
{
    $result = new ViewModel();
    $result->setTerminal(true);

    return $result;
}
61
Rob Allen

Le ZF2 est fortement en développement et aucune garantie ne peut être faite de la façon dont il fonctionne maintenant, ce sera le cas lorsque ZF2 atteindra un état stable.

Cependant, la nouvelle couche de vue de Zend\Mvc a été récemment fusionnée, ce qui permet de renvoyer des modèles de vue avec des informations relatives à la vue pour restituer des vues. Pour désactiver le rendu de la vue, vous pouvez raccourcir la répartition en renvoyant directement une réponse afin que la vue ne soit pas rendue du tout.

public function somethingAction () 
{
    // Do some intelligent work

    return $this->getResponse();
}
4
Jurian Sluiman

Je dirais juste désactivé la mise en page seulement

$viewModel = new ViewModel();
$viewModel->setTerminal(true);

return $viewModel;

et faire écho votre json dans vos fichiers de vue ...

3
Kdecom

J'ai trouvé une solution simple pour désactiver la mise en page. Dans ma ajaxAction

public function ajaxAction()
{   
     if ( $this->getRequest()->isXmlHttpRequest() ) {

          $this->layout( 'layout/ajax-layout' );

     }
}

Et dans \module\Application\view\layout\ajax-layout.phtml

<?php echo $this->content; ?>
3
rab

Vous pouvez le faire en utilisant le modèle de console ou tuer l'exécution de manière arbitraire.

<?php

namespace SomeModule\Controller;

use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\ConsoleModel; // if use ConsoleMode
use Zend\View\Model\JsonModel; // if use JSON

class SomeController extends ActionController
{
    public function someAction() {

      return new ConsoleModel(array(
        'message' => 'Hello World',
      ));

    }
    // Json Method
    public function jsonAction() {

      return new JsonModel(array(
        'message' => 'Hello World',
      ));

    }

    // This is really exaggerated, but it is quite effective.

    public function killAction() {
      echo 'Hello World';
      exit;
    }
}

Dans la vue, utilisez: some.phtml

<?php
echo $message;

json.phtml

<?php
echo $message;
0
Neftalí Yagua
public function testAction()
{   
    return false;
}

retourne simplement faux.

0
morphois

Il suffit de retourner '' dans la méthode et le chargement automatique du modèle de vue ne sera pas effectué.

public function goAction()
{   
    return '';
}
0
Meabed

fonction publique indexAction () {

    $news = $this->em->getRepository('Admin\Model\News');
    foreach ($news->findAll() as $new) {


        $res = $this->getResponse()->setContent($new->toXml());
    }





    return $res;

}
0
Sina Miandashti