2010-02-28 14 views
0

J'ai un module "admin" et je veux qu'il serve les "contrôleurs dynamiques", c'est-à-dire pour fournir un comportement par défaut pour les contrôleurs qui n'existent pas réellement ("contrôleurs virtuels")."Admin module" prenant en charge le framework Yii

J'ai inventé un mécanisme de messagerie léger pour une communication lâche entre les modules. Je voudrais l'utiliser de telle sorte que lorsque, par exemple,

?r=admin/users/index 

est demandé, il appellera le « contrôleur virtuel » « UserController » de AdminModule, qui, par défaut, utiliser ce mécanisme de messagerie pour notifier le véritable module « UsersModule » il peut répondre à la demande.

J'ai pensé à simuler ce comportement dans AdminModule :: init(), mais à ce stade, je n'ai aucun moyen de décider si l'action peut être traitée par un contrôleur réel ou non, ou du moins je ne sais pas pour le faire. C'est à cause de la façon dont Yii fonctionne: de bas en haut, le contrôleur est celui qui rend la vue ET la disposition de l'application (ou celle du module, si elle existe), par exemple. Je ne pense pas que le module ait un mot à dire sur la gestion d'un contrôleur + action donné ou non. Pour récapituler, je cherche un type de CWebModule :: missingController ($ controllerId, $ actionId), tout comme CController :: missingAction ($ actionId), ou une solution de contournement pour simuler cela.

Ce serait peut-être dans CWebModule :: init() ou quelque part où je peux trouver

  1. si le contrôleur existe effectivement, dans ce cas, il est son travail de manipuler
  2. la actionID $ et $ controllerID
  3. si le module $ controllerID existe (je ne l'ai pas tapé incorrectement, dans r = admin/users/index, "users" est le module réel, comme spécifié dans la configuration de l'application).

Répondre