2012-02-08 3 views
20

Я борюсь с отключением зрения в ZF2 $this->_helper->viewRenderer->setNoRender(); or (true) не повезло, как он всегда говорит, чтоотключив вид с в действии в ZF2

PHP Fatal error: Call to a member function setNoRender() on a non-object in ../module/Location/src/Location/Controller/LocationController.php on line 190 

ответ

61

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

спасибо так много! :) – ufk

-1

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

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

или

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

К сожалению, я уже попробовать это, но всегда получаю ** не в состоянии найти класс, связанный с «ViewRenderer» ** Ошибка – mahi

+0

Также найдено это не сработало - либо метод –

4

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

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

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

    return $this->getResponse(); 
} 
0

Только возвращение «» в методе и не автозагрузку Посмотреть шаблон

public function goAction() 
{ 
    return ''; 
} 
0

функция indexAction общественности() {

$news = $this->em->getRepository('Admin\Model\News'); 
    foreach ($news->findAll() as $new) { 


     $res = $this->getResponse()->setContent($new->toXml()); 
    } 





    return $res; 

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

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

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

return $viewModel; 

и эхо вашего JSON в ваши просматривать файлы ...

0

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

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