2011-09-20 3 views
1

J'ai lu quelques livres Zend différents où ACL et Auth sont implémentés en utilisant la composition. Ils impliquent généralement Action Helpers avec des méthodes preDispatch, enregistrées dans le bootstrap.Zend: ACL et Auth via héritage, pas de composition

Maintenant, dans tout le codage jusqu'à présent, les mêmes méthodes ACL et Auth sont exécutées pour chacun de mes contrôleurs. Par conséquent, je pense que je pourrais tout aussi bien utiliser l'héritage pour accomplir ceci. Est-ce que je manque quelque chose? L'héritage semble juste un peu plus simple.

Auparavant, j'utilisais des assistants Action pour éviter d'avoir à charger toutes les règles dans l'objet ACL. (J'étais juste en train d'enregistrer le contrôleur actuel comme ressource ACL, et d'ajouter les règles pour cela). Quand je suis arrivé à intégrer Zend Navigation, cependant, j'ai trouvé que j'avais besoin de toutes les règles ACL (indépendamment du contrôleur), afin de déterminer les options de menu à présenter à l'utilisateur.

Je suppose qu'avec la composition, mes aides ACL et Auth sont plus faciles à utiliser sur d'autres projets, mais ce n'est qu'un petit avantage dans mon cas.

Merci!

+1

Vous pouvez également utiliser des plugins de contrôleurs, voir http://stackoverflow.com/questions/4943940/using-zend-auth-to-secure-all-controllers/4944672#4944672 ressemble à une composition mais est très proche de l'héritage des contrôleurs. Et cela ne vous empêche pas d'avoir un objet Zend_Acl disponible pour les menus. – regilero

+0

Nice un regilero. Voulez-vous couper/coller ceci dans une réponse? C'est mon préféré jusqu'ici. –

Répondre

1

Vous pouvez utiliser des plugins de contrôleurs aussi bien, voir previous answer, semble être une composition, mais est très proche héritage des contrôleurs. Et cela ne vous empêche pas d'avoir un objet Zend_Acl disponible pour les menus.

+0

Merci regilero. J'avais oublié les plugins du contrôleur frontal. –

1

Il existe de nombreuses raisons valables de préférer la composition à l'héritage, en général. Vous pouvez voir beaucoup d'opinions ici: Prefer composition over inheritance?

Cela dit, c'est à vous de décider si vous avez de meilleures raisons d'utiliser l'héritage plutôt que la composition. Vous pouvez intégrer votre ACL dans une classe de contrôleur de base et en faire hériter tous vos contrôleurs. Vous avez une autre question SO à ce sujet ici: Base controller for all controllers in zend framework

espoir qui aide,