2012-02-08 25 views
20

walczę o wyłączenie widoku w ZF2 $this->_helper->viewRenderer->setNoRender(); or (true) bez powodzenia, ponieważ zawsze mówi, żewyłączenie widoku ze w akcji w 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 

Odpowiedz

61

Aby wyłączyć widok całkowicie, od wewnątrz działania kontrolera, należy zwrócić obiekt 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; 
    } 
} 

Aby wyłączyć układ i tylko renderowanie widoku modelu szablonu ta akcja byłaby to zrobić:

public function anotherAction() 
{ 
    $result = new ViewModel(); 
    $result->setTerminal(true); 

    return $result; 
} 
+0

bardzo dziękuję! :) – ufk

-1

$this->_helper nie jest dostępny w ZF2 ale aby wyłączyć widok można zrobić:

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

lub

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

Niestety ja już spróbować tego, ale zawsze dostać ** stanie zlokalizować klasy związane z „viewRenderer” ** błąd – mahi

+0

Także to nie działa - albo metoda –

4

ZF2 jest mocno w budowie i nie guar antee można zrobić tak, jak teraz działa, będzie tak, jak działa, gdy ZF2 osiągnie stabilny stan.

Jednak nowa warstwa widoków z Zend \ Mvc została niedawno scalona, ​​co daje możliwość zwrócenia modeli widoku z informacjami pokrewnymi w celu renderowania widoków. Aby wyłączyć renderowanie widoku, możesz skrócić wysyłanie, zwracając odpowiedź bezpośrednio, więc widok nie jest renderowany w ogóle.

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

    return $this->getResponse(); 
} 
0

Tylko powrót „” w sposobie i nie będzie autoload View szablon

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

publicznego indexAction function() {

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


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





    return $res; 

} 
3

znalazłem proste rozwiązanie dla układu wyłączyć. W moim ajaxAction

public function ajaxAction() 
{ 
    if ($this->getRequest()->isXmlHttpRequest()) { 

      $this->layout('layout/ajax-layout'); 

    } 
} 

I \module\Application\view\layout\ajax-layout.phtml

<?php echo $this->content; ?> 
3

powiedziałbym po prostu wyłączony układ tylko

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

return $viewModel; 

i echo swoją json do Państwa zdanie plików ...

0
public function testAction() 
{ 
    return false; 
} 

si mply return false.

0

Można to zrobić za pomocą modelu konsoli lub arbitralnie zabić wykonanie.

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

Biorąc użytku: some.phtml

<?php 
echo $message; 

json.Phtml

<?php 
echo $message; 
Powiązane problemy