Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-07-2009 17:42:29

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

[Résolu] Application.ini - Plugin avec paramètre & View Helper

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


aka miboo

Hors ligne

 

#2 28-07-2009 19:41:24

Intiilapa
Membre
Date d'inscription: 03-02-2009
Messages: 95

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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

 

#3 29-07-2009 10:01:53

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

Donc je n'ai plus qu'à retirer la déclaration de ce plugin dans mon application.ini ?


aka miboo

Hors ligne

 

#4 29-07-2009 10:51:14

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

Bon, voici comment j'ai fais, je ne sais pas si c'est la meilleur méthode, en tout cas ça semble marcher smile

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/


aka miboo

Hors ligne

 

#5 29-07-2009 12:00:23

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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

 

#6 29-07-2009 12:08:14

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

+1

C'est comme ça que je configure mes acl et que j'initialise l'objet. Miam les ressources, mangez-en.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#7 30-07-2009 11:10:23

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

Merci pour vos précisions smile


aka miboo

Hors ligne

 

#8 03-08-2009 17:44:08

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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.


aka miboo

Hors ligne

 

#9 03-08-2009 17:57:33

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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

 

#10 03-08-2009 18:02:58

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

J'ai rajouté ce s et j'ai la même erreur sad

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');   
(...)


aka miboo

Hors ligne

 

#11 03-08-2009 18:51:45

tomtom
Membre
Lieu: Strasbourg
Date d'inscription: 07-01-2009
Messages: 14

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

salut

dans le bootstrap je ne rajoute pas l'APPLICATION_PATH à la commande, je pense qu'il gere tout seul grace a l'autoloader

Code:

$view->addHelperPath('Etic/View/Helper', 'Etic_View_Helper');

avec ds le application.ini

Code:

autoloaderNamespaces.etic = "Etic_"

Hors ligne

 

#12 03-08-2009 18:53:40

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

(Ouais apparement pas de s... Pourquoi mon code marche... bonne question à laquelle je n'ai pas le temps de répondre... Désolé)

Hors ligne

 

#13 04-08-2009 10:06:53

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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'autoloader

Code:

$view->addHelperPath('Etic/View/Helper', 'Etic_View_Helper');

avec ds le application.ini

Code:

autoloaderNamespaces.etic = "Etic_"

Ca ne change rien sad

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


aka miboo

Hors ligne

 

#14 04-08-2009 10:10:20

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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

 

#15 04-08-2009 12:01:45

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

Edit: en fin de compte c'est cette ligne là : "resources.view[] =" dans le application.ini qui posait problème

merci


aka miboo

Hors ligne

 

#16 04-08-2009 12:05:25

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

resources.view[] =

Ca sert à quoi ça ?!?

Hors ligne

 

#17 04-08-2009 12:06:00

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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 big_smile


aka miboo

Hors ligne

 

#18 07-08-2009 00:18:04

Intiilapa
Membre
Date d'inscription: 03-02-2009
Messages: 95

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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

 

#19 07-08-2009 09:41:57

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [Résolu] Application.ini - Plugin avec paramètre & View Helper

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 smile

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 smile


aka miboo

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages