Executar um mesmo método em todos os controllers

Zend_Controller, Zend_Controller_Action, Zend_Controller_Dispatcher, Zend_Controller_Plugin, Zend_Controller_RewriteRouter, Zend_View, Zend_Http_Request, Zend_Http_Response

Moderador: chackal_sjc

Executar um mesmo método em todos os controllers

Mensagempor mmsweb » Ter Out 27, 2009 1:33 pm

Olá Pessoal,

Gostaria de saber qual a melhor prática para executar um bloco de código em todos os controllers da minha aplicação. O que quero fazer é pegar o nome do controller atual e jogar para dentro do view e utilizá-lo no meu layout.

Pensei em fazer por um plugin do Zend_Controller_Plugin_Abstract mas não sei como setar o valor do view por aqui...

obs: estou usando o ZF 1.9.

Valeu!
Abçs,

MMSWEB Internet - Soluções Interativas, Inteligentes e Eficientes.
Avatar de usuário
mmsweb
Participante
 
Mensagens: 45
Data de registro: Qui Dez 11, 2008 7:05 pm

Re: Executar um mesmo método em todos os controllers

Mensagempor TulioBraga » Qua Out 28, 2009 9:26 pm

Desconheço uma forma de comunicar um Plugin com uma View, mas você poderia extender a classe Zend_Controller_Action e sobrescrever o init(), para que este possa capturar o nome do controller e enviar para a View.

Código: Selecionar tudo
//Captura o nome do controller
$this->getRequest()->getModuleName();

// Captura o nome do controller
$this->getRequest()->getControllerName();

//Captura o nome da action
$this->getRequest()->getActionName();


A partir daí, você poderia criar uma classe que extenda a Zend_Controller_Action:

Código: Selecionar tudo
class ControllerNameToView extends Zend_Controller_Action{
   
   public function init(){
      $this->view->controller = $this->getRequest()->getControllerName();
   }
   
}


E criar todos os seus controller extendendo esta nova classe:

Código: Selecionar tudo
class IndexController extends ControllerNameToView{ ... }


Como a classe filha(ControllerNameToView) tem muito pouca diferença em relação à classe pai(Zend_Controller_Action), a diferença de carregamento é imperceptível.

OBS: O nome do controller será recuperado em lower case.
Avatar de usuário
TulioBraga
Participante
 
Mensagens: 51
Data de registro: Sex Mar 06, 2009 12:00 am
Localização: Belo Horizonte

Re: Executar um mesmo método em todos os controllers

Mensagempor marcio » Ter Nov 03, 2009 11:06 pm

Olá!

Caso você esteja trabalhando com Zend_Layout, uma alternativa seria por plugin mesmo, assim:

Código: Selecionar tudo
   public function preDispatch(Zend_Controller_Request_Abstract $request){
      $layout = new Zend_Layout();
      $view = $layout->getView();
      $view->controllerName = $request->getControllerName()
   }


Depois na sua view é só usar:

Código: Selecionar tudo
$this->controllerName


Abraço!
marcio
Membro
 
Mensagens: 26
Data de registro: Qui Jul 17, 2008 11:43 pm


Retornar para Model-View-Controller (MVC)

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes