disabling view with in action in ZF2

落花浮王杯 提交于 2019-12-29 14:16:18

问题


I am struggling with disabling view in ZF2 $this->_helper->viewRenderer->setNoRender(); or (true) with no luck as it always says there

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

回答1:


To disable the view completely, from within a controller action, you should return a Response object:

<?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;
    }   
}

To disable the layout and just render this action's view model template you would do this:

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

    return $result;
}



回答2:


The ZF2 is heavily under development and no guarantee can be made the way it works now, will be the way it works when ZF2 reaches a stable state.

However, the new view layer from Zend\Mvc is recently merged, which gives the option to return view models with view related information to render views. To disable view rendering, you can short-cut dispatching by returning a response directly, so the view is not rendered at all.

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

    return $this->getResponse();
}



回答3:


I found a simple solution for disable layout. In my ajaxAction

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

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

     }
}

And in \module\Application\view\layout\ajax-layout.phtml

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



回答4:


I would say just disabled the layout only

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

return $viewModel;

and echo your json into your view files...




回答5:


Just return '' in the Method and it will not autoload the View template

public function goAction()
{   
    return '';
}



回答6:


public function indexAction() {

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


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





    return $res;

}



回答7:


public function testAction()
{   
    return false;
}

simply return false.




回答8:


You can do so using the console model, or kill execution arbitrarily.

<?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;
    }
}

In view use: some.phtml

<?php
echo $message;

json.phtml

<?php
echo $message;



回答9:


$this->_helper is not available in ZF2 but to disable a view you can do :

$this->broker("ViewRenderer")->setNoRender();

or

$this->broker->load("ViewRenderer")->setNoRender();


来源:https://stackoverflow.com/questions/9193769/disabling-view-with-in-action-in-zf2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!