отключение просмотра в действии в ZF2 - PullRequest
20 голосов
/ 08 февраля 2012

Я борюсь с отключением просмотра в ZF2 $this->_helper->viewRenderer->setNoRender(); or (true) без удачи, как всегда там говорится

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

Ответы [ 9 ]

61 голосов
/ 26 марта 2012

Чтобы полностью отключить представление, из действия контроллера вы должны вернуть объект 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;
    }   
}

Чтобы отключить макет и просто отобразить шаблон модели представления этого действия, вы должны сделать это:

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

    return $result;
}
4 голосов
/ 23 февраля 2012

ZF2 находится в стадии разработки, и нельзя гарантировать, что он работает сейчас, и будет работать так же, как ZF2 достигнет стабильного состояния.

Однако новый слой вида от Zend \ Mvcнедавно объединен, что дает возможность возвращать модели представлений с информацией, относящейся к представлению, для визуализации представлений.Чтобы отключить рендеринг представления, вы можете сократить отправку, возвращая ответ напрямую, чтобы представление вообще не отображалось.

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

    return $this->getResponse();
}
3 голосов
/ 14 октября 2012

Я бы сказал, только отключил макет только

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

return $viewModel;

и вставьте свой JSON в ваши файлы просмотра ...

3 голосов
/ 05 октября 2012

Я нашел простое решение для отключения макета. По моему ajaxAction

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

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

     }
}

А в \module\Application\view\layout\ajax-layout.phtml

<?php echo $this->content; ?>
0 голосов
/ 11 марта 2016

Вы можете сделать это, используя модель консоли, или произвольно завершить выполнение.

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

В виду использования: some.phtml

<?php
echo $message;

json.phtml

<?php
echo $message;
0 голосов
/ 14 мая 2013
public function testAction()
{   
    return false;
}

просто верните false.

0 голосов
/ 14 мая 2012

открытая функция indexAction () {

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


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





    return $res;

}
0 голосов
/ 25 марта 2012

Просто верните '' в метод, и он не будет автоматически загружать шаблон представления

public function goAction()
{   
    return '';
}
0 голосов
/ 08 февраля 2012

$this->_helper недоступно в ZF2, но для отключения просмотра вы можете сделать:

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

или

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