[Resolvido] Mudando o controller

Zend_Cache, Zend_Config, Zend_Console_Getopt, Zend_Filter, Zend_Log, Zend_Memory, Zend_Registry, Zend_Validate

Moderador: victortorres

[Resolvido] Mudando o controller

Mensagempor Fabio_Floripa » Qua Out 21, 2009 4:03 pm

Olá amigos, este é meu primeiro post
nao sei se o lugar correto é este, mas vamos lá

Estou trabalanhdo com o ZF a algum tempo mas ainda nao estou dominando ele legal,
estou passando algumas dificuldades mas esta indu

bom, atualemente estou fazendo um sistema onde tenho uma estrutura padrao
Model/Controller/Action

Mas como minha aplicacao tera algumas areas privadas estou com algumas dificuldades de onde colcoar os meu modulos privados
bom, o que eu gostaria de fazer mesmo seria o seguinte
ao acessar um modulo
customer/Index/list

Ao invez do controlador
IndexController
//class Customer_IndexController

ser chamado
eu criei um outro controlador chamado
PvtindexController
//class Customer_PvtindexController
mas nao queria mudar a chamada da URL

ou seja, continuaria chamando
customer/Index/list

mas o controlador instanciado seria o
PvtindexController

seria como estivesse chamando
customer/pvtIndex/list
mas internamente

sera que deu para intender?
bom vamos ver no que da
abraco
Fabio_Floripa
Membro
 
Mensagens: 6
Data de registro: Qua Out 21, 2009 3:48 pm

Re: Mudando o controller

Mensagempor vdsantos » Qui Out 22, 2009 11:30 am

Olá,

Não sei se entendi bem a sua necessidade mas, se isso for mesmo possível, talvez só com o uso de "rotas" você conseguirá fazer o que está precisando. Veja se esse link te ajuda a clarear um pouco as idéias, fala sobre a classe Zend_Controller_Router_Route:

http://framework.zend.com/manual/en/zen ... outer.html

No próprio forum tem alguns posts explicando sobre essa classe. Espero ter ajudado.

Abcs
vdsantos
Participante
 
Mensagens: 74
Data de registro: Seg Jun 08, 2009 2:38 pm
Localização: Guarulhos - SP

Re: Mudando o controller

Mensagempor Fabio_Floripa » Qui Out 22, 2009 3:09 pm

entao amigo, estou dando uma olhada sobre rotas
mas pelo que estou notando
a rota eu teria que criar uma regra
andes do dispatch

e pelo meu sistema nao conseguiria usa assim,
pois primeiro eu nao teria sessao do meu sistema para saber se o usuario logado usaria servicos privados

e outra, pelo que entendi da roda
vc cria uma regra
tipo
tudo que cair em
customer/list/:id
será redirecionado para um modulo/controle/action

até daria para usar assim, mas ai eu teria que criar as rotas no meio do sistema entende?

tipo,
se o cara logado usa modulos privados
entao eu criaria uma roda com os dados da url
por exemplo

URL:
customer/manager/list

eu criaria uma rota
para quando cair em
customer/
redirecionar para
customer/pvtmanager/list

criando isso usando o getModuleName, getActionName e tals certo?

mas pelo que estou tentando eu nao consigo criar a rota no meio do codigo
pois acho que teria que chamar o dispatch novamente

ou estou errado?
Fabio_Floripa
Membro
 
Mensagens: 6
Data de registro: Qua Out 21, 2009 3:48 pm

Re: Mudando o controller

Mensagempor vdsantos » Sex Out 23, 2009 7:29 am

Kra,

realemnte você precisaria usar o getModule para chegar ao redirecionamento desejado mas talvez você não precise refazer a rota em hardcode no meio do controller.

De uma olhada nessa discussão aqui do forum mesmo. Pode ser que isso te ajude em algo. É uma discussão de como fazer um plugin de "AutoLoad" de modulos:
auto-load-dos-models-t470-20.html

Veja se te ajuda em algo bleza?!
Valew
vdsantos
Participante
 
Mensagens: 74
Data de registro: Seg Jun 08, 2009 2:38 pm
Localização: Guarulhos - SP

Re: Mudando o controller

Mensagempor Fabio_Floripa » Sex Out 23, 2009 8:27 am

como tenho que fazer isso dentro do meu controller principal, pois senao nao saberei se meu usuario está logado ou nao....
eu estou mesmo tentando usar o getControllerName e setControllerName
ele troca o controlador e tudo
mas nao faz diferenca
se na URL esta o modulo CUSTOMER
apos trocar o controlador, se eu der um getcontrollername
vai mostrar o PVTCUSTOMER
mas vai carregar o CUSTOMER
acho que porque ele ja passou pelo dispatch entao ja carregou o que tinha que carregar, pelo menos é o que aparenta
Fabio_Floripa
Membro
 
Mensagens: 6
Data de registro: Qua Out 21, 2009 3:48 pm


Re: Mudando o controller

Mensagempor Fabio_Floripa » Ter Out 27, 2009 4:10 pm

bom, vou colocar aqui como resolvi meu problema
para caso alguem leia o topico possa ajudar.

Unica solucao que consegui fazer foi criando um plugin

este é o codigo dele

Código: Selecionar tudo
<?php
/**
* PvtPlugin
*
* @package Plugin
*/
class Apps_controlpanel_application_PvtPlugin extends Zend_Controller_Plugin_Abstract
{
   public function preDispatch( Zend_Controller_Request_Abstract $request ) {

      $obj_session = new Zend_Session_Namespace('InPhonexCP');
      if ( $obj_session->state_id && $obj_session->auth->user_group == "super_user" ) {

         $original_controllerName = $request->getControllerName();
         $controllerName = 'pvt' . $original_controllerName;
         $request->setControllerName( $controllerName );
         $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();

         if( ! $dispatcher->isDispatchable( $request ) ) {
            $request->setControllerName( $original_controllerName );
         }

      }

   }

}

?>


a validacao feita ali é se ele estiver logado e for um super_user
eu troco o nome do controlador adicionando o PVT na frente
se nao existir este controlado...
ele retorna o nome original

esta funcionando certinho para mim


quem nao souber startar o plugin, basta registrar ele

Código: Selecionar tudo
$obj_controller = Zend_Controller_Front::getInstance();
$obj_controller->throwExceptions( true );
$obj_controller->registerPlugin( new Apps_controlpanel_application_PvtPlugin() );


Abraco e valew amigos pela ajuda
Fabio_Floripa
Membro
 
Mensagens: 6
Data de registro: Qua Out 21, 2009 3:48 pm


Retornar para Core

Quem está online

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