Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

[Resolvido] Abortar ação do método render()...

Recommended Posts

Não sei se é particularidade de estar usando a Smarty como View, mas o método render() está sendo invocado automaticamente a partir dos controllers.

 

Enquanto ajeito algumas funcionalidades, que testo dentro do próprio controller isso acaba atrapalhando pois oconteúdo do template é exibido antes de seja lá qual for o teste que esteja fazendo.

 

Tem como desabilitar esse render() automatico via chamadade agum método de $this -> view?

 

P.S.: A claase de uso do Smarty como view que uso é essa, ligeiramente modificada da que consta no manual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa modificação do link citado é usado o removeHelper().

 

Mas também é usado o addHelper() em seguida com as configurações de 'renderer' da Smarty:

 

public static function setupView() {

       require 'Smarty' . DS . 'Smarty.class.php';

       $smartyConfig = self::$registry -> settings -> Core -> Smarty;

       $view = new Zend_View_Smarty( NULL, $smartyConfig );

       $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer( $view );

       $viewRenderer -> setViewBasePathSpec( ':moduleDir/views/' . $smartyConfig -> template_dir )
                     -> setViewSuffix( 'tpl' );

       Zend_Controller_Action_HelperBroker::removeHelper( 'viewRenderer' );
       Zend_Controller_Action_HelperBroker::addHelper( $viewRenderer );
   }

Se eu comento o addHelper(), ao usar $this -> view -> render() passa-se a procurar os templates em .PHTML e no diretório scripts, configurações essas alteradas e passados ao helper agora comentado.

 

Ou seja, não funciona :(

 

Mas... Nesse caso, a curiosidade não matou o gato.

 

Abri o arquivo ViewRenderer.php (Zend/Controller/Action/Helper/ViewRenderer.php) e busquei por algum método que abortasse como eu queria.

 

Encontrei o setNeverRender(). Passei-o no Bootstrap e funcionou perfeitamente. Parou de renderizar automaticamente.

 

Mas isso é brusco demais, pois se eu estiver testando um controller e nesse teste eu fizer um link para outro, ao acessá-lo estetambém não será renderizado.

 

Então, na action do controller que eu quero bloquear OU no init() do controller (se eu quiser bloquear a renderização para todas as actions), basta incluir:

 

$this -> _helper -> getHelper( 'ViewRenderer' ) -> setNeverRender( TRUE );

Fica a dica http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.