2009-10-06 7 views
0

Désolé, c'est une question assez longue, mais je veux avoir quelques disucssions ici.Zend-Framework: comment on fait ça sans module?

Je suis nouveau sur zend et j'essaie d'éviter d'utiliser des modules car je pense que l'aspect de zend est assez flexible et que le module ajoutera du répertoire et de la confusion. Cependant je me demande une chose. L'application que je construis est assez grande, elle a en fait le concept de modules dans l'application.

Je sais si vous utilisez le module, les choses peuvent être plus organisés, où vous pouvez mettre des modules dans son propre répertoire et ont une vue séparée et contrôleur, etc.

cependant j'ai décidé de simuler le répertoire du module sous forme de

--lang/module (en fait le contrôleur)/contrôleur (c'est l'action)/action (c'est l'action-enfant)/other-params/-

comment nous allons et faisons ce genre de simulation

L'idée initiale i ha ve est d'ajouter une autre route à l'application prendre le 4ème param comme l'action de l'enfant. par exemple

classe some_controller s'étendre étend quelque chose comme Zend_Controller_Action {

public function someAction{ 

    switch (child-action) { 
     case 'child-action1': 
      ....... excute some action 
      break; 
     case 'child-action2': 
      ....... excute some action 
      break;.... 
    } 

} 

que. Est-ce que cela a du sens ou s'il y a une autre approche? et avec cette approche comment nous intégrons Zend_ACL comme comment ajouter la 'fausse action enfant' comme une ressource? Merci.

+0

J'ai un peu de mal à comprendre ce que vous voulez dire, pouvez-vous me donner une idée des objets avec lesquels vous traitez - des noms de contrôleur/action/childaction constructifs? La question de la mise en page de votre action dépend du type de travail que vous essayez de faire. – gnarf

+0

Fondamentalement, j'essaie de simuler des modules sans répertoire de module avec zend framework. Les problèmes résident dans/action/action-enfant. Quelle est la meilleure approche pour définir/simuler l'action des enfants dans l'action existante? Je souhaite remplacer/myModule/myController/myAction par/myController/myAction/myChildAction/ Merci beaucoup. – Dan

Répondre

1

Peut-être que vous pouvez configurer vos itinéraires comme ceci:

/:controller/:action/:child-action 

Voir here pour plus d'informations sur la mise en place des itinéraires.

ensuite dans vos méthodes d'action:

$childAction = $this->getParam('child-action'); 

// convert $childAction to camelCase. 

if(method_exists($this, $childAction)) 
{ 
     // Check ACL 
     $this->$childAction(); 
} 

Ne nommez pas les actions de l'enfant avec le postfix d'action car cela permettrait aux actions à appeler directement. Vous pourriez peut-être les postfixer avec quelque chose comme 'fooChild' mais pas 'fooChildAction' comme ils le feraient ensuite avec 'foo-child'.

+0

Merci pour l'aide smack. Cela signifie que dans chaque fonction d'action, nous devons effectuer ces vérifications et retransmissions. Tout plugin ou extension de classe que je peux appliquer pour obtenir cette vérification pour tous les contrôleurs d'action? – Dan

+0

Allez-vous faire cela pour chaque action de votre application? Si oui, pourquoi êtes-vous contre les modules? Je peux voir pourquoi vous pourriez vouloir adopter cette approche si vous ne faites que cela pour dire quelques actions dans votre application. Vous pouvez faire votre propre plugin et vérifier dans le pré-départ du plugin pour les actions enfants et modifier la demande en conséquence. – smack0007

0

Je pense que cela rend beaucoup plus compliqué que travailler avec la structure du répertoire du module ... qui, une fois mis en place, n'est pas si compliqué que ça du tout, il est juste une séparation logique des classes ...

+0

S'il veut seulement faire cela pour quelques actions dans son application, je peux voir pourquoi cette approche peut être souhaitable. – smack0007

0

Il serait plus judicieux d'ajouter une route;)

ont: module /: controller /: action/-> admin/messages/ajouter

et: module/messages/ajouter /: action -> admin/posts/add/concept qui lierait à PostsAddController :: ConceptAction();

mieux que l'instruction switch je suppose;) Mais vous pouvez l'utiliser pour ... cas "sth": $ this -> _ forward ('my-action', 'my-controller');

Questions connexes