Я хочу использовать некоторый ajax, но я не знаю, как использовать функцию так же, как setNoRender() в zend framework 2, чтобы отключить отображение вида.
Как отключить просмотр рендеринга в zend framework 2?
Я хочу использовать некоторый ajax, но я не знаю, как использовать функцию так же, как setNoRender() в zend framework 2, чтобы отключить отображение вида.
Как отключить просмотр рендеринга в zend framework 2?
Чтобы отключить ваше представление:
public function myactionAction()
{
// your code here ...
return false;
}
"return false" отключает просмотр, а не макет! Зачем? потому что принятые типы:
поэтому "false" отключает представление.
Чтобы отключить макет и представление, верните объект ответа:
public function myactionAction()
{
// your code here ...
return $this->response;
}
Чтобы отключить макет:
public function myactionAction()
{
// your code here ...
$view = new ViewModel();
$view->setTerminal(true);
return $view;
}
Если вы используете JSON, посмотрите на представление JsonStrategy
и верните JsonModel
с вашего контроллера. См. Статью .
В качестве альтернативы вы можете вернуть Response
из своего контроллера, и весь слой представления пропущен:
public function testAction()
{
$response = $this->getResponse();
$response->setStatusCode(200);
$response->setContent('foo');
return $response;
}
Правильный и простое решение для этого
public function testAction()
{
$data = array(
'result' => true,
'data' => array()
);
return $this->getResponse()->setContent(Json::encode($data));
}
Подробности: http://cmyker.blogspot.com/2012/11/zend-framework-2-ajax-return-json.html
Я нашел ответ.
Хотя $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();
$view = new ViewModel(); $ View- > setTerminate (истина);
...
use Zend\View\Model\JsonModel;
public function myAction() {
...
$view = new JsonModel($myArray);
$view->setTerminal(true);
return $view;
}