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

Как отключить компоновку и визуализировать рендеринг в ZF2?

Как отключить компоновку и визуализировать рендеринг в Zend Framework 2.x? Я прочитал документацию и не могу получить ответы на вопросы в google, я нашел ответ на Zend 1.x и он

$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();

Но он больше не работает в Zend Framework 2.x. Мне нужно отключить оба вида рендеринга и макета для запросов Ajax.

Любая помощь будет большой.

4b9b3361

Ответ 1

Просто используйте setTerminal(true) в вашем контроллере, чтобы отключить макет.

Это описано здесь: Zend View Quick Start:: Работа с макетами

Пример:

<?php
namespace YourApp\Controller;

use Zend\View\Model\ViewModel;

class FooController extends AbstractActionController
{
    public function fooAction()
    {
    $viewModel = new ViewModel();
    $viewModel->setVariables(array('key' => 'value'))
              ->setTerminal(true);

    return $viewModel;
    }
}

Если вы хотите отправить ответ JSON вместо рендеринга .phtml файла, попробуйте использовать JsonRenderer:

Добавьте эту строку в начало класса:

use Zend\View\Model\JsonModel;

и вот пример действия, который возвращает JSON:

public function jsonAction()
{
    $data = ['Foo' => 'Bar', 'Baz' => 'Test'];
    return new JsonModel($data);
}

EDIT:

Не забудьте добавить ViewJsonStrategy в ваш module.config.php файл, чтобы позволить контроллерам возвращать JSON. Спасибо @Remi!

'view_manager' => [
    'strategies' => [
        'ViewJsonStrategy'
    ],
],

Ответ 2

Вы можете добавить это к концу своего действия:

return $this->getResponse();

Ответ 3

Немного больше информации об этом ответе... Я часто использую это при выводе динамических файлов разных типов: json, xml, pdf и т.д. Это пример вывода XML файла.

// In the controller
$r = $this->getResponse();

$r->setContent(file_get_contents($filePath)); //

$r->getHeaders()->addHeaders(
    array('Content-Type'=>'application/xml; charset=utf-8'));

return $r;

Вид не отображается, и отправляются только указанный контент и заголовки.