par
vince56 » 03 déc. 2010, 13:11
Bonjour,
voilà je rencontre un problème avec mon site sur mon ordinateur (il fonctionne chez l'hébergeur). Pour tout vous, je suis novice sur Zend Framework, et je dois modifier un site existant que je n'ai pas développé.
J'arrive à me connecter à mon site via login/pwd, puis j'ai accès au menu qui me liste mes données.
Je peux ouvrir un formulaire qui me permet de créer un élément dans ma base de données, mais dès que je valide ce formulaire, je suis renvoyé sur la view '/error/privileges'
J'obtiens la même erreur si je lance un export de la base de donnée.
Je ne comprends pas d'où ça vient, le contenu de la BDD est identique entre mon ordinateur et le serveur.
Auriez-vous une solution ? ou début de piste ?
si cela peux vous aider, voici le code que j'ai.
index.php
<?php
/*
*/
// Constantes principales...
define("HOME_OS_DIR","C:/AppServ");
define("WEBAPP_DIR",HOME_OS_DIR."/www/zfProject");
define("MODEL_DIR",WEBAPP_DIR."/application/models");
define("ROOT_URL","http://zfproject.localhost/zfProject");
define("BASE_URL","/");
define("ZEND_FRAMEWORK_DIR",HOME_OS_DIR."C:/Program Files/ZendFrameworkCli/library");
define("LOG_FILE",HOME_OS_DIR."/logs/zend.log");
define("PLUGINS_DIR",WEBAPP_DIR."/application/plugins");
define("VALID_DIR",WEBAPP_DIR."/application/MyValid");
define("CGI_DIR",WEBAPP_DIR."/cgi");
set_include_path(
".".PATH_SEPARATOR.
MODEL_DIR.PATH_SEPARATOR.
ZEND_FRAMEWORK_DIR.PATH_SEPARATOR.PLUGINS_DIR.PATH_SEPARATOR.
VALID_DIR.PATH_SEPARATOR.
get_include_path()
);
/*Pour pouvoir loader des classes Ó la Zend*/
require_once 'Zend/Loader.php';
// ... Comme par exemple le registre
Zend_Loader::loadClass("Zend_Registry");
// Initialisation de la log
Zend_Loader::loadClass('Zend_Log');
Zend_Loader::loadClass('Zend_Log_Writer_Stream');
$logger = new Zend_Log();
$logger->addWriter(new Zend_Log_Writer_Stream(LOG_FILE));
Zend_Registry::set("logger",$logger);
Zend_Registry::get("logger")->debug("** IP ". $_SERVER["REMOTE_ADDR"] . "** URI=".$_SERVER["REQUEST_URI"]);
// Controller init
Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
$controller = Zend_Controller_Front::getInstance();
$router = new Zend_Controller_Router_Rewrite();
$cmtRoute = new Zend_Controller_Router_Route(
"comment/:action/:comment",
array( "comment"=>null,
"controller"=>"comment",
"action"=>"display"
)
);
$router->addRoute("comment",$cmtRoute);
$controller->setBaseUrl(BASE_URL);
$controller->setRouter($router);
//Ici on indique le rÚpertoire des controlleurs
$controller->setControllerDirectory('application/controllers');
$controller->throwExceptions(true);
// initialisation du viewRenderer
Zend_Loader::loadClass("Zend_View");
$view = new Zend_View();
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setView($view)
->setViewSuffix('phtml');
// chargement de la configuration
Zend_Loader::loadClass('Zend_Config_Ini');
$config = new Zend_Config_Ini('application/configs/application.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);
// Mise en place de la db
Zend_Loader::loadClass("Zend_Db");
Zend_Loader::loadClass("Zend_Db_Table");
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('dbAdapter', $db);
//Chargement de la classe d'authentification
Zend_Loader::loadClass('Zend_Auth');
$auth = Zend_Auth::getInstance();
// CrÚation de l'objet Acl
Zend_Loader::loadClass('Zend_Acl');
Zend_Loader::loadClass('Zend_Acl_Role');
Zend_Loader::loadClass('Zend_Acl_Resource');
Zend_Loader::loadClass('PluginAuth');
Zend_Loader::loadClass('MyAcl');
$acl = new MyAcl($auth);
$controller->registerPlugin(new PluginAuth($auth, $acl));
/**
* TODO Gestion des profils
*/
/**
* Configuration par d+faut de Zend_Mail
*/
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';
$cfg = array('port' => $config->email->port,
'auth' => $config->email->auth,
'username' => $config->email->username,
'password' => $config->email->password,
'ssl' => $config->email->ssl
);
define("MAIL_FROM",$config->email->mailfrom);
$transport = new Zend_Mail_Transport_Smtp($config->email->smtp, $cfg);
Zend_Mail::setDefaultTransport($transport);
/*
* Configuration par dÚfaut du translator de Zend_Form pour avoir les messages d'erreur en Franþais
*/
Zend_Loader::loadClass('Zend_Form');
Zend_Loader::loadClass('Zend_Translate');
$french = array(
'notAlnum' => "'%value%' ne contient pas que des lettres et/ou des chiffres.",
'notAlpha' => "'%value%' ne contient pas que des lettres.",
'notBetween' => "'%value%' n'est pas compris entre %min% et %max% inclus.",
'notBetweenStrict' => "'%value%' n'est pas compris entre %min% et %max% exclus.",
'dateNotYYYY-MM-DD'=> "'%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).",
'dateInvalid' => "'%value%' n'est pas une date valide.",
'dateFalseFormat' => "'%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).",
'notDigits' => "'%value%' ne contient pas que des chiffres.",
'emailAddressInvalid' => "'%value%' n'est pas une adresse mail valide selon le format adresse@domaine.",
'emailAddressInvalidHostname' => "'%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.",
'emailAddressInvalidMxRecord' => "'%hostname%' n'accepte pas l'adresse mail '%value%'.",
'emailAddressDotAtom' => "'%localPart%' ne respecte pas le format dot-atom.",
'emailAddressQuotedString' => "'%localPart%' ne respecte pas le format quoted-string.",
'emailAddressInvalidLocalPart' => "'%localPart%' n'est pas une adresse individuelle valide.",
'notFloat' => "'%value%' n'est pas un nombre décimal.",
'notGreaterThan' => "'%value%' n'est pas strictement supérieur à '%min%'.",
'notInt'=> "'%value%' n'est pas un nombre entier.",
'notLessThan' => "'%value%' n'est pas strictement inférieur à '%max%'.",
'isEmpty' => "Ce champ est vide : vous devez le compléter.",
'stringEmpty' => "Ce champ est vide : vous devez le compléter.",
'regexNotMatch' => "'%value%' ne respecte pas le format '%pattern%'.",
'stringLengthTooShort' => "'%value%' fait moins de %min% caractères.",
'stringLengthTooLong' => "'%value%' fait plus de %max% caractères.",
'ibanNotSupported' => "'%value%' est un IBAN provenant d'un pays inconnu",
'ibanFalseFormat' => "'%value%' ne correspond pas au format en vigueur pour le pays concerné",
'ibanCheckFailed' => "'%value%' ne passe pas le test de la somme de contrôle. Veuillez vérifier votre saisie",
'fileFilesSizeTooBig' => "La taille de fichier maximale autorisée est de '%max%', cependant '%size%' ont été détectés",
'fileFilesSizeTooSmall' =>"La taille de fichier minimale autorisée est de '%min%', cependant '%size%' ont été détectés",
'fileFilesSizeNotReadable' => "Impossible de lire le fichier"
);
$translate = new Zend_Translate('array', $french, 'fr');
Zend_Form::setDefaultTranslator($translate);
Zend_Loader::loadClass('Zend_Paginator');
Zend_Loader::loadClass('Zend_View_Helper_PaginationControl');
Zend_Paginator::setDefaultScrollingStyle('Sliding');
Zend_View_Helper_PaginationControl::setDefaultViewPartial('my_pagination_control.phtml');
//Zend_Auth::getInstance()->clearIdentity();
// call dispatcher
$controller->dispatch();
?>
puis le plugin
<?php
class PluginAuth extends Zend_Controller_Plugin_Abstract
{
private $_auth;
private $_acl;
private $_noauth = array('module' => 'default',
'controller' => 'auth',
'action' => 'login');
private $_noacl = array('module' => 'default',
'controller' => 'error',
'action' => 'privileges');
public function __construct($auth, $acl)
{
$this->_auth = $auth;
$this->_acl = $acl;
}
public function preDispatch($request)
{
/*if (!Zend_Controller_Front::getDispatcher()->isDispatchable($request))
{
renvoyer vers une 404
}*/
if ($this->_auth->hasIdentity()) {
$role = $this->_auth->getIdentity()->role;
} else {
$role = 'invite';
}
$controller = $this->getRequest()->getControllerName();
$action = $this->getRequest()->getActionName();
$module = $this->getRequest()->getModuleName(); $request->module;
$resource = $controller;
if (!$this->_acl->has($resource)) {
$resource = null;
}
if (!$this->_acl->isAllowed($role, $resource, $action)) {
if (!$this->_auth->hasIdentity()) {
$module = $this->_noauth['module'];
$controller = $this->_noauth['controller'];
$action = $this->_noauth['action'];
} else {
$module = $this->_noacl['module'];
$controller = $this->_noacl['controller'];
$action = $this->_noacl['action'];
}
}
$request->setModuleName($module);
$request->setControllerName($controller);
$request->setActionName($action);
}
}
et la classe MyAcl :
<?php
{
public function __construct(Zend_Auth $auth)
{
$this->add(new Zend_Acl_Resource('error'));
$this->add(new Zend_Acl_Resource('index'));
$this->add(new Zend_Acl_Resource('com'));
$this->add(new Zend_Acl_Resource('dp'));
$this->add(new Zend_Acl_Resource('pay'));
$this->add(new Zend_Acl_Resource('retourpay'));
$this->add(new Zend_Acl_Resource('user'));
$this->add(new Zend_Acl_Resource('auth'));
$this->add(new Zend_Acl_Resource('xport'));
$this->add(new Zend_Acl_Resource('msg'));
$this->addRole(new Zend_Acl_Role('invite'));
$this->addRole(new Zend_Acl_Role('membre'), 'invite');
$this->addRole(new Zend_Acl_Role('admin'), 'membre');
// Les invités peuvent uniquement voir le contenu et demander un mot de passe
$this->allow('invite', 'error');
$this->allow('invite', 'pay');
$this->allow('invite', 'retourpay');
$this->allow('membre', 'index');
$this->allow('membre', 'auth');
$this->allow('membre', 'user');
$this->allow('membre', 'dp');
$this->allow('membre', 'xport');
$this->allow('membre', 'msg');
$this->allow('admin'); // Accès sans aucune restriction sauf celle d'ajouter une demande de paiement
$this->deny('admin','dp','ajouter');
// Ajout d'un nouvel objet ACL
//Zend_Loader::loadClass('Zend_Acl_Role');
// NOTE: Zend_Acl dépend de Zend_Auth, il faut toujours lui passer en paramètre pour obtenir l'identité
}
}
Merci
Bonjour,
voilà je rencontre un problème avec mon site sur mon ordinateur (il fonctionne chez l'hébergeur). Pour tout vous, je suis novice sur Zend Framework, et je dois modifier un site existant que je n'ai pas développé.
J'arrive à me connecter à mon site via login/pwd, puis j'ai accès au menu qui me liste mes données.
Je peux ouvrir un formulaire qui me permet de créer un élément dans ma base de données, mais dès que je valide ce formulaire, je suis renvoyé sur la view '/error/privileges'
J'obtiens la même erreur si je lance un export de la base de donnée.
Je ne comprends pas d'où ça vient, le contenu de la BDD est identique entre mon ordinateur et le serveur.
Auriez-vous une solution ? ou début de piste ?
si cela peux vous aider, voici le code que j'ai.
index.php
[php]<?php
/*
*/
// Constantes principales...
define("HOME_OS_DIR","C:/AppServ");
define("WEBAPP_DIR",HOME_OS_DIR."/www/zfProject");
define("MODEL_DIR",WEBAPP_DIR."/application/models");
define("ROOT_URL","http://zfproject.localhost/zfProject");
define("BASE_URL","/");
define("ZEND_FRAMEWORK_DIR",HOME_OS_DIR."C:/Program Files/ZendFrameworkCli/library");
define("LOG_FILE",HOME_OS_DIR."/logs/zend.log");
define("PLUGINS_DIR",WEBAPP_DIR."/application/plugins");
define("VALID_DIR",WEBAPP_DIR."/application/MyValid");
define("CGI_DIR",WEBAPP_DIR."/cgi");
set_include_path(
".".PATH_SEPARATOR.
MODEL_DIR.PATH_SEPARATOR.
ZEND_FRAMEWORK_DIR.PATH_SEPARATOR.PLUGINS_DIR.PATH_SEPARATOR.
VALID_DIR.PATH_SEPARATOR.
get_include_path()
);
/*Pour pouvoir loader des classes Ó la Zend*/
require_once 'Zend/Loader.php';
// ... Comme par exemple le registre
Zend_Loader::loadClass("Zend_Registry");
// Initialisation de la log
Zend_Loader::loadClass('Zend_Log');
Zend_Loader::loadClass('Zend_Log_Writer_Stream');
$logger = new Zend_Log();
$logger->addWriter(new Zend_Log_Writer_Stream(LOG_FILE));
Zend_Registry::set("logger",$logger);
Zend_Registry::get("logger")->debug("** IP ". $_SERVER["REMOTE_ADDR"] . "** URI=".$_SERVER["REQUEST_URI"]);
// Controller init
Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
$controller = Zend_Controller_Front::getInstance();
$router = new Zend_Controller_Router_Rewrite();
$cmtRoute = new Zend_Controller_Router_Route(
"comment/:action/:comment",
array( "comment"=>null,
"controller"=>"comment",
"action"=>"display"
)
);
$router->addRoute("comment",$cmtRoute);
$controller->setBaseUrl(BASE_URL);
$controller->setRouter($router);
//Ici on indique le rÚpertoire des controlleurs
$controller->setControllerDirectory('application/controllers');
$controller->throwExceptions(true);
// initialisation du viewRenderer
Zend_Loader::loadClass("Zend_View");
$view = new Zend_View();
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setView($view)
->setViewSuffix('phtml');
// chargement de la configuration
Zend_Loader::loadClass('Zend_Config_Ini');
$config = new Zend_Config_Ini('application/configs/application.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);
// Mise en place de la db
Zend_Loader::loadClass("Zend_Db");
Zend_Loader::loadClass("Zend_Db_Table");
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('dbAdapter', $db);
//Chargement de la classe d'authentification
Zend_Loader::loadClass('Zend_Auth');
$auth = Zend_Auth::getInstance();
// CrÚation de l'objet Acl
Zend_Loader::loadClass('Zend_Acl');
Zend_Loader::loadClass('Zend_Acl_Role');
Zend_Loader::loadClass('Zend_Acl_Resource');
Zend_Loader::loadClass('PluginAuth');
Zend_Loader::loadClass('MyAcl');
$acl = new MyAcl($auth);
$controller->registerPlugin(new PluginAuth($auth, $acl));
/**
* TODO Gestion des profils
*/
/**
* Configuration par d+faut de Zend_Mail
*/
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';
$cfg = array('port' => $config->email->port,
'auth' => $config->email->auth,
'username' => $config->email->username,
'password' => $config->email->password,
'ssl' => $config->email->ssl
);
define("MAIL_FROM",$config->email->mailfrom);
$transport = new Zend_Mail_Transport_Smtp($config->email->smtp, $cfg);
Zend_Mail::setDefaultTransport($transport);
/*
* Configuration par dÚfaut du translator de Zend_Form pour avoir les messages d'erreur en Franþais
*/
Zend_Loader::loadClass('Zend_Form');
Zend_Loader::loadClass('Zend_Translate');
$french = array(
'notAlnum' => "'%value%' ne contient pas que des lettres et/ou des chiffres.",
'notAlpha' => "'%value%' ne contient pas que des lettres.",
'notBetween' => "'%value%' n'est pas compris entre %min% et %max% inclus.",
'notBetweenStrict' => "'%value%' n'est pas compris entre %min% et %max% exclus.",
'dateNotYYYY-MM-DD'=> "'%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).",
'dateInvalid' => "'%value%' n'est pas une date valide.",
'dateFalseFormat' => "'%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).",
'notDigits' => "'%value%' ne contient pas que des chiffres.",
'emailAddressInvalid' => "'%value%' n'est pas une adresse mail valide selon le format adresse@domaine.",
'emailAddressInvalidHostname' => "'%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.",
'emailAddressInvalidMxRecord' => "'%hostname%' n'accepte pas l'adresse mail '%value%'.",
'emailAddressDotAtom' => "'%localPart%' ne respecte pas le format dot-atom.",
'emailAddressQuotedString' => "'%localPart%' ne respecte pas le format quoted-string.",
'emailAddressInvalidLocalPart' => "'%localPart%' n'est pas une adresse individuelle valide.",
'notFloat' => "'%value%' n'est pas un nombre décimal.",
'notGreaterThan' => "'%value%' n'est pas strictement supérieur à '%min%'.",
'notInt'=> "'%value%' n'est pas un nombre entier.",
'notLessThan' => "'%value%' n'est pas strictement inférieur à '%max%'.",
'isEmpty' => "Ce champ est vide : vous devez le compléter.",
'stringEmpty' => "Ce champ est vide : vous devez le compléter.",
'regexNotMatch' => "'%value%' ne respecte pas le format '%pattern%'.",
'stringLengthTooShort' => "'%value%' fait moins de %min% caractères.",
'stringLengthTooLong' => "'%value%' fait plus de %max% caractères.",
'ibanNotSupported' => "'%value%' est un IBAN provenant d'un pays inconnu",
'ibanFalseFormat' => "'%value%' ne correspond pas au format en vigueur pour le pays concerné",
'ibanCheckFailed' => "'%value%' ne passe pas le test de la somme de contrôle. Veuillez vérifier votre saisie",
'fileFilesSizeTooBig' => "La taille de fichier maximale autorisée est de '%max%', cependant '%size%' ont été détectés",
'fileFilesSizeTooSmall' =>"La taille de fichier minimale autorisée est de '%min%', cependant '%size%' ont été détectés",
'fileFilesSizeNotReadable' => "Impossible de lire le fichier"
);
$translate = new Zend_Translate('array', $french, 'fr');
Zend_Form::setDefaultTranslator($translate);
Zend_Loader::loadClass('Zend_Paginator');
Zend_Loader::loadClass('Zend_View_Helper_PaginationControl');
Zend_Paginator::setDefaultScrollingStyle('Sliding');
Zend_View_Helper_PaginationControl::setDefaultViewPartial('my_pagination_control.phtml');
//Zend_Auth::getInstance()->clearIdentity();
// call dispatcher
$controller->dispatch();
?>
[/php]
puis le plugin
[php]<?php
class PluginAuth extends Zend_Controller_Plugin_Abstract
{
private $_auth;
private $_acl;
private $_noauth = array('module' => 'default',
'controller' => 'auth',
'action' => 'login');
private $_noacl = array('module' => 'default',
'controller' => 'error',
'action' => 'privileges');
public function __construct($auth, $acl)
{
$this->_auth = $auth;
$this->_acl = $acl;
}
public function preDispatch($request)
{
/*if (!Zend_Controller_Front::getDispatcher()->isDispatchable($request))
{
renvoyer vers une 404
}*/
if ($this->_auth->hasIdentity()) {
$role = $this->_auth->getIdentity()->role;
} else {
$role = 'invite';
}
$controller = $this->getRequest()->getControllerName();
$action = $this->getRequest()->getActionName();
$module = $this->getRequest()->getModuleName(); $request->module;
$resource = $controller;
if (!$this->_acl->has($resource)) {
$resource = null;
}
if (!$this->_acl->isAllowed($role, $resource, $action)) {
if (!$this->_auth->hasIdentity()) {
$module = $this->_noauth['module'];
$controller = $this->_noauth['controller'];
$action = $this->_noauth['action'];
} else {
$module = $this->_noacl['module'];
$controller = $this->_noacl['controller'];
$action = $this->_noacl['action'];
}
}
$request->setModuleName($module);
$request->setControllerName($controller);
$request->setActionName($action);
}
}[/php]
et la classe MyAcl :
[php]<?php
{
public function __construct(Zend_Auth $auth)
{
$this->add(new Zend_Acl_Resource('error'));
$this->add(new Zend_Acl_Resource('index'));
$this->add(new Zend_Acl_Resource('com'));
$this->add(new Zend_Acl_Resource('dp'));
$this->add(new Zend_Acl_Resource('pay'));
$this->add(new Zend_Acl_Resource('retourpay'));
$this->add(new Zend_Acl_Resource('user'));
$this->add(new Zend_Acl_Resource('auth'));
$this->add(new Zend_Acl_Resource('xport'));
$this->add(new Zend_Acl_Resource('msg'));
$this->addRole(new Zend_Acl_Role('invite'));
$this->addRole(new Zend_Acl_Role('membre'), 'invite');
$this->addRole(new Zend_Acl_Role('admin'), 'membre');
// Les invités peuvent uniquement voir le contenu et demander un mot de passe
$this->allow('invite', 'error');
$this->allow('invite', 'pay');
$this->allow('invite', 'retourpay');
$this->allow('membre', 'index');
$this->allow('membre', 'auth');
$this->allow('membre', 'user');
$this->allow('membre', 'dp');
$this->allow('membre', 'xport');
$this->allow('membre', 'msg');
$this->allow('admin'); // Accès sans aucune restriction sauf celle d'ajouter une demande de paiement
$this->deny('admin','dp','ajouter');
// Ajout d'un nouvel objet ACL
//Zend_Loader::loadClass('Zend_Acl_Role');
// NOTE: Zend_Acl dépend de Zend_Auth, il faut toujours lui passer en paramètre pour obtenir l'identité
}
}
[/php]
Merci