Отключить просмотр в действии в 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
Ответы
Ответ 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();