Pergunta

Eu tenho um módulo "admin" e quero que ele sirva "controladores dinâmicos", ou seja, fornecer um comportamento padrão para controladores que realmente não existem ("controladores virtuais").

Eu inventei um mecanismo leve de mensagens para comunicação frouxa entre os módulos. Eu gostaria de usá -lo de tal forma que quando, por exemplo,

?r=admin/users/index

é solicitado, ele chamará o "Virtual Controller" "UserController" do AdminModule, que, por padrão, usaria esse mecanismo de mensagens para notificar o módulo real "UsuáriosModule", ele pode responder à solicitação.

Pensei em simular esse comportamento no adminmodule :: init (), mas nesse ponto não tenho como decidir se a ação pode ser processada por um controlador real ou não, ou pelo menos não sei como fazê -lo.

Isso ocorre devido à maneira como o YII funciona: de baixo para cima, o controlador é o que renderiza a visualização e o layout do aplicativo (ou o módulo, se existir), por exemplo. Não acho que o módulo tenha uma palavra a dizer sobre como lidar com um determinado controlador+ação ou não.

Para recapitular, estou procurando um tipo de CWebModule :: MissingController ($ controlerId, $ ActionId), assim como o CController :: MissingAction ($ ActionId) ou uma solução alternativa para simular isso.

Isso possivelmente estaria no cwebmodule :: init () ou em algum lugar onde eu possa descobrir

  1. se o controlador realmente existe, nesse caso, é seu trabalho lidar com isso
  2. o $ ActionId e $ controlerid
  3. Se o módulo $ controlerid existe (eu não digitei errado, em r = admin/usuários/index, "usuários" é o módulo real, conforme especificado na configuração do aplicativo).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top