Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'essaye de baser mon identification sur ce tutorial : http://codeutopia.net/blog/2009/02/06/z … mple-acls/
Je me retrouve donc avec une première classe d'Acl, ou sont déclarées mes ressources (qui correspondent à mes catégories, sections, actions, etc.)
Acl.php
class My_Acl extends Zend_Acl {
public function __construct() {
//Add a new role called "guest"
$this->addRole(new Zend_Acl_Role('guest'));
//Add a role called user, which inherits from guest
$this->addRole(new Zend_Acl_Role('user'), 'guest');
//Add a resource called page
$this->add(new Zend_Acl_Resource('page'));
//Add a resource called news, which inherits page
$this->add(new Zend_Acl_Resource('news'), 'page');
//Finally, we want to allow guests to view pages
$this->allow('guest', 'page', 'view');
//and users can comment news
$this->allow('user', 'news', 'comment');
}
}
Et mon plugin controller
class My_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
private $_acl = null;
public function __construct(Zend_Acl $acl) {
$this->_acl = $acl;
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
//As in the earlier example, authed users will have the role user
$role = (Zend_Auth::getInstance()->hasIdentity())
? 'user'
: 'guest';
//For this example, we will use the controller as the resource:
$resource = $request->getControllerName();
if(!$this->_acl->isAllowed($role, $resource, 'view')) {
//If the user has no access we send him elsewhere by changing the request
$request->setModuleName('auth')
->setControllerName('auth')
->setActionName('login');
}
}
}
Il suffit ensuite d'instancier la classe Acl et d'informer le front controller du plugin :
$acl = new My_Acl();
//assuming $fc is the front controller
$fc->registerPlugin(new My_Plugin_Acl($acl));
Jusque là, pas de problème. Sauf que depuis peu, j'informe mon controleur frontal via le fichier application.ini
resources.frontController.plugins.acl = My_Controller_Plugin_Acl
Sauf que dans le cas présent, je ne passe plus en paramètre le $acl. Comment avoir quelque chose d'équivalent en conservant mon fichier application.ini. Via le bootstrap?
Merci d'avance
Hors ligne
Tout à fait. Actuellement, il n'est pas possible d'avoir des arguments au constructeur en passant par application.ini et Zend_Application. Les méthodes protected commençant par _init de la classe Bootstrap sont automatiquement appelée.
Hors ligne
Donc je n'ai plus qu'à retirer la déclaration de ce plugin dans mon application.ini ?
Hors ligne
Bon, voici comment j'ai fais, je ne sais pas si c'est la meilleur méthode, en tout cas ça semble marcher
protected function _initControllersPlugins()
{
$acl = new My_Acl();
$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new My_Plugin_Controller_Acl($acl));
}
Pour ceux que ça intéresse, j'ai trouvé un sujet intéressant sur la configuration du bootstrap http://monzee.wordpress.com/2009/05/21/ … ns-to-1-8/
Hors ligne
Tu pourrais aussi faire un système de Xxx_Application_Resources_Acl qui charge ta classe via d'éventuelles paramètres fournis par le application.ini
Ou pas.
Hors ligne
+1
C'est comme ça que je configure mes acl et que j'initialise l'objet. Miam les ressources, mangez-en.
A+ benjamin.
Hors ligne
Merci pour vos précisions
Hors ligne
Bonjour,
j'ai un petit soucis avec mes view helper.
Extrait application.ini
autoloaderNamespaces.0 = "My_"
autoloaderNamespaces.1 = "Ide_"
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/../library/My/View/Helper"
Extrait ...library\My\View\Helper\ReduceUrl.php
class My_View_Helper_ReduceUrl extends Zend_View_Helper_Abstract
(...)
Architecture
application
modules
admin
view
scripts
index
index.phtml
library
My
View
Helper
ReduceUrl.php
Vue index.phml
<?php echo $this->ReduceUrl($ma_variable->mon_url);?>
Lorsque je met mon filtre (correctement nommé) dans Zend\View\Helper ça marche.
Hors ligne
Je crois que ta ligne dans le ini n'est tout simplement pas pris en compte car il mlanque un s a helperPaths
J'ai un truc du genre et ça marche très bien
resources.view.helperPaths.Rx_View_Helper = APPLICATION_PATH "/../library/Rx/View/Helper"
Hors ligne
J'ai rajouté ce s et j'ai la même erreur
Edit: Apparemment il n'y a pas de "s"
Message: Plugin by name 'ReduceUrl' was not found in the registry; used paths: Admin_View_Helper_: (...)/application/modules/admin/views\helpers/ Zend_View_Helper_: Zend/View/Helper/
Même en essayant de passer directement dans le bootstrap, j'ai le même problème :
protected function _initViewDoctype()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$view->setEncoding('UTF-8');
$view->doctype('XHTML1_STRICT');
$view->addHelperPath(APPLICATION_PATH . '/../library/My/View/Helper/', 'My_View_Helper');
(...)
Hors ligne
salut
dans le bootstrap je ne rajoute pas l'APPLICATION_PATH à la commande, je pense qu'il gere tout seul grace a l'autoloader
$view->addHelperPath('Etic/View/Helper', 'Etic_View_Helper');
avec ds le application.ini
autoloaderNamespaces.etic = "Etic_"
Hors ligne
Pas grave Mr MoOx
tomtom a écrit:
salut
dans le bootstrap je ne rajoute pas l'APPLICATION_PATH à la commande, je pense qu'il gere tout seul grace a l'autoloaderCode:
$view->addHelperPath('Etic/View/Helper', 'Etic_View_Helper');avec ds le application.ini
Code:
autoloaderNamespaces.etic = "Etic_"
Ca ne change rien
protected function _initViewDoctype()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$view->setEncoding('UTF-8');
$view->doctype('XHTML1_STRICT');
$view->addHelperPath('My/View/Helper', 'My_View_Helper');
Message d'erreur:
Message: Plugin by name 'ReduceUrl' was not found in the registry; used paths: Admin_View_Helper_: (...)/application/modules/admin/views\helpers/ Zend_View_Helper_: Zend/View/Helper/
J'ai l'impression que c'est mon organisation en modules (admin/default) qui pose problème
Hors ligne
Ce qui est bizarre, c'est que ton path n'est pas présent. Peut être ce n'est pas sur la bonne vue que tu rajoutes le path. Je dis ça, je dis rien...
Hors ligne
Edit: en fin de compte c'est cette ligne là : "resources.view[] =" dans le application.ini qui posait problème
merci
Hors ligne
Mr.MoOx a écrit:
resources.view[] =
Ca sert à quoi ça ?!?
Effectivement c'est ça, je viens d'éditer mon message. Merci encore
Edit: t'es trop rapide
Hors ligne
Il manque ton application.ini ou un extrait pour un peu mieux comprendre ton histoires de «resources.view[] = » lol C'est une ligne qui est restée du QuickStart ? À priori, ta méthode _initViewDoctype() démarrait la resource View, donc la configuration pour Zend_View définie dans ta méthode devait prendre le pas sur la configuration issue du application.ini (l'encodage de Zend_View peut être définie dans le application.ini). Il faudrait que je reprenne le code de Zend_Application sous les yeux pour revoir l'enchaînement. Au final, tu l'as défini dans Bootstrap.php ou application.ini ?
Cela me fait penser à une réflexion depuis que j'ai un moment. Je trouve qu'il deviendrait urgent d'avoir une implémentation MVC des ACL. Surtout qu'en cherchant un peu, on finit toujours tomber sur la même chose à 80%.
J'avoue que j'ai même envie de signer la CLA pour devenir contributeur au Zend Framework pour proposer un Zend_Application_Resource_Acl avec un Zend_Controller_Plugin_Acl et Zend_Controller_Action_Helper_Acl : le trio gagnant en somme ! Avec comme optique que plus on suit les conventions moins on écrit de code ^^
On pourrait même ajouter une classe pour charger une config depuis un ini ou autre, même si j'apprécie la classe dérivée pour définir les règles.
Une proposition des deux derniers composants que je cite commence à rouiller depuis le temps que ça n'avance plus ... Je ne sais pas trop comment est géré ce genre de freeze. Cela tourne dans ma tête pendant mon temps libre, je pense qu'avec de la logique et en laissant configurable ça devient de plus en plus évident le code.
Un Zend_Application_Resource_Cache me trotte aussi en tête (même s'il introduit le problème de la dépendance entre les ressources à démarrer vu qu'il doit s'exécuter avant en général). Un Zend_Application_Resource_Log avec la méthode factory proposée pour Zend_Log. Revoir le Zend_Application_Resource_View pour pouvoir définir tout ce qui est nécessaire. D'une manière générale, j'ai hâte que Zend_Application évolue. Il faudrait que je prenne aussi le temps d'écrire quelques issues à ce sujet.
Hors ligne
Finalement comme je l'ai dis plus haut mon problème est résolu. J'avais effectivement des lignes qui se rejoignaient. J'ai tendance à préférer l'utilisation du fichier de configuration application.ini.
Je n'ai donc plus grand chose dans mon bootstrap, hormis le démarrage du plugin Acl
Pour les contributions elles sont les bienvenues, l'activité des contributeurs y est pour beaucoup dans le développement actuel du framework.
Je vais moi même signé le CLA à la rentrée, mais dans une optique de traduction de la documentation
Hors ligne
Pages: 1