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
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;
}
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();
}
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 ...
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; ?>
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;
public function testAction()
{
return false;
}
retourne simplement faux.
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 '';
}
fonction publique indexAction () {
$news = $this->em->getRepository('Admin\Model\News'); foreach ($news->findAll() as $new) { $res = $this->getResponse()->setContent($new->toXml()); } return $res; }