IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Aucune erreur 404 affichée


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut Aucune erreur 404 affichée
    Bonjour,

    Je suis en train de m'arracher les cheveux avec un site développé sous ZF. Je dois essayer de faire des modifications dessus alors qu'il a été développé à l'arrache par des sociétés offshores...

    Actuellement, si je vais sur le site : http://www.riads-marrakech.org/

    Si je fais http://www.riads-marrakech.org/sgfdgdfgdg => pas d'erreur, juste le contenu principal du layout qui affiche "auth".

    Déjà que j'n'arrive pas à générer des urls différentes pour le contenu multilingue (cf : autre post)

    Je suppose que cette erreur est relayée par Zend_Auth. Ce site utilise un fichier de conf acl.ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
     
    [roles]
    guest = null
    planificateur = null
    administrateur = null
    webmaster = null
    Standard = null
     
    [ressources]
    index = null
    error = null
    inscription = null
    inscriptionnewsletter = null
    utilisateur = null
    search = null
    apropos = null
    ficheriad = null
    admin_index = null
    admin_users = null
    admin_agendas = null
    renseignement = null
    agenda = null
    loisir = null
    admin_config = null
    admin_usersprofile = null
    admin_typemisenavant = null
    admin_misenavant = null
    admin_misenavantautres = null
    admin_misenavantbonplan = null
    admin_misenavantoffrespeciale = null
    admin_etablissement = null
    admin_prestation = null
    admin_lieutouristique = null
    admin_exclusivite = null
    admin_chambre = null
    admin_prixetablissement = null
    admin_prixchambre = null
    admin_pack = null
    admin_compositionpack = null
    admin_newsletter = null
    admin_statistique = null
    language = null
     
    [planificateur]
    allow.admin_index = deconnect
    allow.error = null
    allow.index = null
    allow.inscription = null
    allow.search = null
    allow.admin_agendas = null
    allow.language = null
     
    [administrateur]
    allow.admin_index = deconnect
    allow.error = null
    allow.index = null
    allow.inscription = null
    allow.search = null
    allow.ficheriad = null
    allow.renseignement = null
    allow.agenda = null
    allow.loisir = null
    allow.apropos = null
    allow.admin_agendas = null
    allow.admin_users = null
    allow.utilisateur = null
    allow.inscriptionnewsletter = null
    allow.admin_usersprofile = null
    allow.admin_typemisenavant = null
    allow.admin_misenavant = null
    allow.admin_misenavantautres = null
    allow.admin_misenavantbonplan = null
    allow.admin_misenavantoffrespeciale = null
    allow.admin_etablissement = null
    allow.admin_etablissement = null
    allow.admin_prestation = null
    allow.admin_lieutouristique = null
    allow.admin_exclusivite = null
    allow.admin_chambre = null
    allow.admin_prixetablissement = null
    allow.admin_prixchambre = null
    allow.admin_pack = null
    allow.admin_compositionpack = null
    allow.admin_newsletter = null
    allow.admin_statistique = null
    allow.language = null
     
    [Standard]
    allow.admin_index = index
    allow.error = null
    allow.index = null
    allow.inscription = null
    allow.language = null
     
    [webmaster]
    allow.inscription = null
    allow.admin_users = null
    allow.admin_usersprofile = null
    allow.language = null
     
    [guest]
    allow.index = null
    allow.error = null
    allow.inscription = null
    allow.search = null
    allow.inscriptionnewsletter = null
    allow.renseignement = null
    allow.agenda = null
    allow.loisir = null
    allow.apropos = null
    allow.ficheriad = null
    allow.utilisateur = null
    allow.ficheriad = null
    allow.admin_index = null
    allow.admin_users = null
    allow.language = null
     
    [pro]
    allow.index = null
    allow.error = null
    allow.inscription = null
    allow.search = null
    allow.inscriptionnewsletter = null
    allow.renseignement = null
    allow.agenda = null
    allow.loisir = null
    allow.apropos = null
    allow.ficheriad = null
    allow.utilisateur = null
    allow.ficheriad = null
    allow.admin_index = null
    allow.admin_users = null
    allow.language = null
    Voici mon htaccess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ErrorDocument  404  /404.php
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)|$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]

    Peut-on m'aider ?

  2. #2
    Membre éprouvé Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    De ce que j'en ai vu, il y a bien une page d'erreur en /default/error/error.
    Le problème est donc au niveau du plugin d'authentification qui redirige vers la page d'accueil lors d'une 404.
    tu peux donner le application.ini et le Bootstrap pour voir où se trouve ce plugin ?

  3. #3
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Coucou,

    Merci de ta réponse.

    Voici le application.ini

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    phpSettings.date.timezone = "Europe/Paris"
     
    [production]
    resources.frontController.params.prefixDefaultModule = "1"
     
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
     
    includePaths.library = APPLICATION_PATH "/../library"
     
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    appnamespace = "Application"
     
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
    resources.frontController.params.displayExceptions = 1
     
    resources.view[] =
    resources.view.helperPath.Default_View_Helper_ = "default/views/helpers/"
     
    resources.db.adapter = "PDO_MYSQL"
    resources.db.params.username = "riad"
    resources.db.params.password = "SLavzHe"
    resources.db.params.dbname = "riad_dev"
    resources.db.params.charset = "utf8"
    resources.db.params.driver_options.1002 = "SET NAMES utf8"
     
    resources.frontController.moduleDirectory       = APPLICATION_PATH "/modules"
    resources.modules[] = ""
     
    [staging : production]
     
    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.db.adapter = "PDO_MYSQL"
    resources.db.params.username = "riad"
    resources.db.params.password = "SLavzHe"
    resources.db.params.dbname = "riad_dev"
    resources.db.params.charset = "utf8"
    resources.db.params.driver_options.1002 = "SET NAMES utf8"
     
    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.frontController.params.displayExceptions = 1
    resources.db.adapter = "PDO_MYSQL"
    resources.db.params.username = "riad"
    resources.db.params.password = "SLavzHe"
    resources.db.params.dbname = "riad_dev"
    resources.db.params.charset = "utf8"
    resources.db.params.driver_options.1002 = "SET NAMES utf8"
    Et voici le bootstrap de l'application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected $_front;
     
        protected $_view;
     
        protected function _initDoctype()
        {
            $this->bootstrap('view');
            $view = $this->getResource('view');
            $view->doctype('XHTML1_STRICT');
        }
     
        protected function _initDefaultNamespace()
        {
            $this->bootstrap('frontcontroller');
            $front = $this->getResource('frontcontroller');
            $defaultModule = $front->getControllerDirectory($front->getDefaultModule());
            new Zend_Application_Module_Autoloader(array(
                    'namespace' => '',
                    'basePath'  => APPLICATION_PATH . $defaultModule,
            ));
        }
     
        protected function _initSession()
        {
     
     
        }
     
        protected function _initApplication()
        {
            $this->bootstrap('FrontController');
            $front = $this->getResource('FrontController');
            $front->throwExceptions(false);
            $front->addModuleDirectory(APPLICATION_PATH . '/modules');
        }
     
        protected function _initAutoload()
        {
            $this->bootstrap("frontController");
            $front = $this->frontController;
     
            $autoloader = Zend_Loader_Autoloader::getInstance();
            $autoloader->setFallbackAutoloader(true);
     
            $modules = $front->getControllerDirectory();
            $default = $front->getDefaultModule();
     
            foreach (array_keys($modules) as $module) {
                if ($module === $default) {
                    continue;
                }
     
                $autoloader->pushAutoloader(new Zend_Application_Module_Autoloader(array(
                     "namespace" => ucwords($module),
                     "basePath" => $front->getModuleDirectory($module),
                )));
     
            }
     
    		$autoloader->registerNamespace('Utility_');
            $autoloader->suppressNotFoundWarnings(true);
     
            return $autoloader;
        }
     
        protected function _initViewController()
        {
            $this->bootstrap('view');
            $this->bootstrap('FrontController');
            $this->_view = $this->getResource('view');
            $this->_front = $this->getResource('FrontController');
        }
     
        protected function _initLayout(){
            $layout = explode('/', $_SERVER['REQUEST_URI']);
     
            if(in_array('admin', $layout)){
                $layout_dir = 'admin';
            }else{
                $layout_dir = 'default';
            }
     
            Zend_Layout::startMvc(array('layoutPath'=> APPLICATION_PATH . "/modules/$layout_dir/layouts"));
     
            $helperPath = APPLICATION_PATH . "/modules/$layout_dir/views/helpers";
            Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setView( $this->_view );
            $this->_view->addHelperPath($helperPath, 'Helper_');
        }
     
        protected function _initAuth()
        {
            $auth = Zend_Auth::getInstance();
            if ($auth->hasIdentity()) {
                //$username = utf8_encode($auth->getIdentity()->lastNameUser) . ' ' . strtoupper( substr( utf8_encode($auth->getIdentity()->firstNameUser), 0, 1 ) ) . '.';
                //$logoutLink = $helperUrl->url( array ('action' => 'deconnexion', 'controller' => 'index' ) );
                 //die("connecte");
            }  else {
                //die("deconnecte");
            }
        }
     
        public function _initAcl()
        {
            $this->bootstrap("frontController");
            $front = $this->frontController;
     
            $acl     = new Admin_Model_Acl( APPLICATION_PATH . '/configs/acl.ini' ) ;
            $front->registerPlugin( new Admin_Model_Auth( $acl ) ) ;
        }
     
    	/**
    	 * @return Zend_Navigation
    	 * + init the session language to choose the right xml
    	 */
    	protected function _initNavigation()  
    	{	
    		if(!isset($_SESSION['lang']) OR empty($_SESSION['lang'])) $_SESSION['lang'] = 'fr';
     
    		if($_SESSION['lang'] == 'en')
    	 		$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation-en.xml', 'nav');
    		elseif($_SESSION['lang'] == 'es')
    			$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation-es.xml', 'nav');
    		else
    			$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
     
        	$navigation = new Zend_Navigation($config);
        	//Zend_Registry::set('Zend_Navigation', $navigation);
        	$this->_view->navigation($navigation);
     
    		/**
    		 * background site management
    		 */
    		$iNbrBg = 6;
     
    		if(!isset($_SESSION['bg']))
    			$_SESSION['bg'] = rand(1,$iNbrBg);
     
    	}
     
     
     
     
    }
    Et voici le boostrap du module default

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
     
    class Default_Bootstrap extends Zend_Application_Module_Bootstrap
    {
    	public function _initRoutes()
        {
            $frontController = Zend_Controller_Front::getInstance();
            $router = $frontController->getRouter();
     
            $route = new Zend_Controller_Router_Route_Static (
                'login',
                array('controller' => 'inscription', 
                      'action' => 'etape1',
                      'module' => 'default',)
            );
     
            $router->addRoute('login', $route);
     
            $routereg = new Zend_Controller_Router_Route_Regex(
              'ficheriad/detail/(\d+)-(.+)\.html',
              array(
                  'controller' => 'ficheriad',
                  'action'     => 'detail',
                  'module' => 'default',
              ),
     
              array(
                  1 => 'iEtablissementId',
                  2 => 'description'
              ),
              'ficheriad/detail/%d-%s.html'
          );
          $router->addRoute('ficheRiad', $routereg);
     
        }
    }
    ?>
    Merci de ton aide.

  4. #4
    Membre éprouvé Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    Bon... c'est vrai que la propreté des configs et de l'archi me laisse un peu pantois...

    De ce que je comprend (je crois), c'est que le "plugin" est appelé ici "model" et plus précisément Admin_Model_Auth...

    Donc je suppose qu'il existe un module "admin" avec un répertoire "models".
    Pourrais-tu donner le fichier Auth.php qui doit être dedans ?

  5. #5
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Je confirme que le problème se situe au niveau du plugin et que si tu étais connecté, il n'y aurais aucun problème.

    Avant de rediriger vers le login, il faut vérifier l’existence de la ressource, ce qui ne semble pas être fait.

    Par contre, ton acl.ini n'est pas maintenable dans l'état.
    Utilise l'héritage plutôt que de recopier tout à chaque fois.

    L'héritage fonctionne ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [planificateur:guest]

  6. #6
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Coucou,

    Comme je l'ai dit, je viens à la base de CodeIgniter. Je connais à la base ZF de nom, mais ne m'y suis pas mis dessus par volonté mais par nécessité "employé faire modif sur site qu'on a récupéré ayant été trafiqué en amont par 2 agences offshores".

    J'ai lu la doc, jamais fait de tuto... j'm'en suis sorti pour le mvc en général, pour rajouter des fonctionnalités... mais là ensuite, on est dans des trucs où il faudrait que je prenne le temps de décortiquer / apprendre... mais ce n'est pas dans la dynamique et l'objectif du truc XD.

    Rien n'est maintenable dans ce site... les mecs n'ont jamais entendu parlé du DRY dedans... Enfin bref ^^

    Pour en revenir au sujet.

    Il y a bien un module qui s'appelle admin.

    Et voici le contenu du Auth.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <?php
     
    class Admin_Model_Auth extends Zend_Controller_Plugin_Abstract
    {
        /**
         * @var Zend_Auth instance
         */
        private $_auth;
     
        /**
         * @var Zend_Acl instance
         */
        private $_acl;
     
        /**
         * Chemin de redirection lors de l'échec d'authentification
         */
        const FAIL_AUTH_MODULE     = 'default';
        const FAIL_AUTH_ACTION     = 'authentification';
        const FAIL_AUTH_CONTROLLER = 'auth';
     
        /**
         * Chemin de redirection lors de l'échec de contrôle des privilèges
         */
        const FAIL_ACL_MODULE     = 'default';
        const FAIL_ACL_ACTION     = 'privilege';
        const FAIL_ACL_CONTROLLER = 'auth';
     
        /**
         * Constructeur
         */
        public function __construct(Zend_Acl $acl)	{
                $this->_acl  = $acl ;
                $this->_auth = Zend_Auth::getInstance() ;
        }
     
        /**
         * Vérifie les autorisations
         * Utilise _request et _response hérités et injectés par le FC
         */
        public function preDispatch(Zend_Controller_Request_Abstract $request)	{
                // is the user authenticated
                if ($this->_auth->hasIdentity()) {
                    $user = $this->_auth->getStorage()->read() ;
                    //Zend_Debug::dump( $user );
                    $role = $user->role ;               
                } else {
                    // no = guest user
                    $role = 'guest';
                }
     
                $module 	= $request->getModuleName() ;
                $controller = $request->getControllerName() ;
                $action     = $request->getActionName() ;
     
                $front = Zend_Controller_Front::getInstance() ;
                $default = $front->getDefaultModule() ;
     
                // compose le nom de la ressource
     
                if ($module == $default)	{
                        $resource = $controller ;
                } else {
                        $resource = $module.'_'.$controller ;
                }
     
     
                // est-ce que la ressource existe ?
                if (!$this->_acl->has($resource)) {
                  $resource = null;
                }
                //echo "contr=$controller role=$role res=$resource act=$action";
                // contrôle si l'utilisateur est autorisé
                if (!$this->_acl->isAllowed($role, $resource, $action)) {
                        // l'utilisateur n'est pas autorisé à accéder à cette ressource
                        // on va le rediriger
     
                        if (!$this->_auth->hasIdentity()) {
                                // il n'est pas identifié -> module de login
                                $module = self::FAIL_AUTH_MODULE ;
                                $controller = self::FAIL_AUTH_CONTROLLER ;
                                $action = self::FAIL_AUTH_ACTION ;
                        } else {
                                // il est identifié -> error de privilèges
                                $module = self::FAIL_ACL_MODULE ;
                                $controller = self::FAIL_ACL_CONTROLLER ;
                                $action = self::FAIL_ACL_ACTION ;
                        }
                }
     
                $request->setModuleName($module) ;
                $request->setControllerName($controller) ;
                $request->setActionName($action) ;
        }
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/10/2009, 10h13
  2. Réponses: 6
    Dernier message: 20/08/2009, 21h21
  3. Réponses: 3
    Dernier message: 07/06/2007, 19h26
  4. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo