Как отключить просмотр рендеринга в zend framework 2? - программирование

Как отключить просмотр рендеринга в zend framework 2?

Я хочу использовать некоторый ajax, но я не знаю, как использовать функцию так же, как setNoRender() в zend framework 2, чтобы отключить отображение вида.

Как отключить просмотр рендеринга в zend framework 2?

4b9b3361

Ответ 1

  • Чтобы отключить ваше представление:

    public function myactionAction()
    {
        // your code here ...
        return false;
    }
    

"return false" отключает просмотр, а не макет! Зачем? потому что принятые типы:

  • ViewModel
  • массив
  • NULL

поэтому "false" отключает представление.

  • Чтобы отключить макет и представление, верните объект ответа:

    public function myactionAction()
    {
        // your code here ...
        return $this->response;
    }
    
  • Чтобы отключить макет:

    public function myactionAction()
    {
        // your code here ...
        $view = new ViewModel();
        $view->setTerminal(true);
        return $view;
    }
    

Ответ 2

Если вы используете JSON, посмотрите на представление JsonStrategy и верните JsonModel с вашего контроллера. См. Статью .

В качестве альтернативы вы можете вернуть Response из своего контроллера, и весь слой представления пропущен:

public function testAction()
{
    $response = $this->getResponse();
    $response->setStatusCode(200);
    $response->setContent('foo');
    return $response;
}   

Ответ 4

Я нашел ответ.

Хотя $this->layout()->getLayout() возвращает имя/путь для вновь выбранного макета... Макет не изменяется ни с одной из следующих команд...

внутри контроллера

$this->getLocator()->get('view')->layout()->setLayout('layouts/ajax.phtml');
$this->getLocator()->get('view')->layout()->setLayout('ajax');
$this->getLocator()->get('view')->layout()->disableLayout();

в представлении PHTML файла

$this->layout()->setLayout('layouts/ajax.phtml');
$this->layout()->setLayout('ajax');
$this->layout()->disableLayout();

Ответ 5

$view = new ViewModel();  $ View- > setTerminate (истина);

Ответ 6

...
use Zend\View\Model\JsonModel;

public function myAction() {
    ...

    $view = new JsonModel($myArray);
    $view->setTerminal(true);
    return $view;
}