Tomasz Pupiec

Tomasz Pupiec programista, Webcode

Temat: Jak wyłączyć renderowanie widoku ?

Potrzebuję po spełnieniu pewnych warunków wyłączyć dla akcji
renderowanie widoku. Layout ma się renderować normalnie, chodzi o to żeby nie wyrzucał wyjątku o brakującym pliku widoku.
Znalazłem coś takiego

$this->_helper->viewRenderer->setNoRender(true).

Żeby nie trzeba było tego robić dla każdej akcji, chciałbym to ustawić jakoś globalnie, np w pluginie albo wogóle poza front controllerem.
Czy ktoś ma pomysł jak to zrobić ?

btw. ustawienie $frontController->setParam('noViewRenderer', true) też nic nie daje, bo wtedy nie mam dostępu do zmiennych widoku przypisywanych w kontrolerze.

konto usunięte

Temat: Jak wyłączyć renderowanie widoku ?

Tomasz Pupiec:
Żeby nie trzeba było tego robić dla każdej akcji, chciałbym to ustawić jakoś globalnie, np w pluginie albo wogóle poza front controllerem.
Czy ktoś ma pomysł jak to zrobić ?

dla jednego kontrolera:

public function init() {
$this->_helper->viewRenderer->setNoRender(true);
}

dla wielu kontrolerów, robisz klasę MyController extends Zend_Controller_Action, w niej w init bądź konstruktorze ustalasz kiedy wyłączyć render i po niej dziedziczysz w kontrolerach pamiętając o wywołaniu odpowiednich metod w klasie nadrzędnej.
Tomasz Pupiec

Tomasz Pupiec programista, Webcode

Temat: Jak wyłączyć renderowanie widoku ?

Paweł Chalacis:

dla wielu kontrolerów, robisz klasę MyController extends Zend_Controller_Action, w niej w init bądź konstruktorze ustalasz kiedy wyłączyć render i po niej dziedziczysz w kontrolerach pamiętając o wywołaniu odpowiednich metod w klasie nadrzędnej.

Też mi to przyszło do głowy, myślałem, że może jednak da się inaczej.

Dziękuję bardzo za odpowiedz :)
Piotr Rybałtowski

Piotr Rybałtowski Programista PHP,
Symfony, Zend
Expressive, Node.js

Temat: Jak wyłączyć renderowanie widoku ?

Tudzież nadpisujesz __construct, który to zrobi i odpali parent::__construct() - oszczędzi to wywoływanie parent:init() wszędzie, gdzie init() używasz. :)

konto usunięte

Temat: Jak wyłączyć renderowanie widoku ?

Piotrek Rybałtowski:
Tudzież nadpisujesz __construct, który to zrobi i odpali parent::__construct() - oszczędzi to wywoływanie parent:init() wszędzie, gdzie init() używasz. :)

Można i tak, ale po co? :-) Lepiej dla aplikacji, jeśli użyje się metody init(). Zresztą:
Zend Reference Guide:
While you can always override the action controller's constructor, > we do not recommend this. Zend_Controller_Action::__construct()
performs some important tasks, such as registering the request and > response objects, as well as any custom invocation arguments
passed in from the front controller. If you must override the
constructor, be sure to call parent::__construct($request,
$response, $invokeArgs).
Piotr Rybałtowski

Piotr Rybałtowski Programista PHP,
Symfony, Zend
Expressive, Node.js

Temat: Jak wyłączyć renderowanie widoku ?

Toć napisałem to co Zend poleca - żeby wywołać parent::__construct(). A po co? Żeby w każdym kontrolerze przy wykorzystaniu init() nie wołać ciągle parent::init(), to bardziej upierdliwe niż napisać raz klasę do dziedziczenia z jednym odwołaniem do parent. Zresztą - do wyboru do koloru.
Michał Sznurawa

Michał Sznurawa Scala Developer

Temat: Jak wyłączyć renderowanie widoku ?

Może w tym przypadku dobrym pomysłem byłoby napisać własnego action helpera z nadpisaną metodą postDispatch() ? (o ile w ogóle zadziała.)


class Zend_Controller_Action_Helper_WarunkowyWylaczaczGenerowaniaWidoku extends Zend_Controller_Action_Helper_Abstract{

function postDispatch(){

if( zaszly_pewne_okolicznosci_przyrody() ){
$this->_actionController->_helper->viewRenderer->setNoRender(true);
}

}

}


Albo opawkować jakoś Zend_Controller_Action_Helper_ViewRenderer , i tej opawkowanej wersji używać zamiast defaultowej.Michał Sznurawa edytował(a) ten post dnia 30.06.09 o godzinie 08:45
Piotr Rybałtowski

Piotr Rybałtowski Programista PHP,
Symfony, Zend
Expressive, Node.js

Temat: Jak wyłączyć renderowanie widoku ?

Albo dopisać plugin. Albo preDispatch/postDispatch zrobić jako metodę w klasie kontrolera. Rozwiązań może być sporo. :)

Następna dyskusja:

Jak dokleic plik do widoku ?




Wyślij zaproszenie do