Подтвердить что ты не робот

Отключить просмотр в действии в ZF2

Я изо всех сил пытаюсь отключить просмотр в 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
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

    return $this->getResponse();
}

Ответ 3

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

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

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

     }
}

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

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

Ответ 4

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

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

return $viewModel;

и эхо ваш json в ваши файлы просмотра...

Ответ 5

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

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

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

Ответ 8

Вы можете сделать это с помощью модели консоли или выполнить произвольное выполнение.

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

Ответ 9

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

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

или

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