Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2008, 15h05   #1
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
Par défaut Site en maintenance -> rediriger toutes les requetes vers une page de maintenance

Hello,

J'ai mon site en MVC sous Zend et je souhaite créer une page de maintenance verslaquelle rediriger toutes les requetes.

J'ai donc à la fin de mon bootstrap remplacer :
Code :
1
2
 
$frontController->dispatch();
par
Code :
1
2
3
4
5
6
 
$oRequeteMaintenance = new Zend_Controller_Request_Http();
$oRequeteMaintenance->setModuleName('maintenance');
$oRequeteMaintenance->setControllerName('toto');
$oRequeteMaintenance->setActionName('titi');
$frontController->dispatch($oRequeteMaintenance);
mais ça ne change rien. La page demandée est tout de même affichée (donc pas de ridirection vers la page de maintenance /maintenance/toto/titi (qui au passage est accessible quand je l'attaque en direct dans le browserr!)

Vous avez une idée ?
__________________
- Blog
- stages-aikido.fr
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 16h34   #2
Membre confirmé
 
Développeur Web
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 268
Points : 268
et si tu utiliser un plugin pour le front controller, un peut comme je le fait pour gerer l'authentification :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class My_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract {
 
    public function preDispatch(Zend_Controller_Request_Abstract $request){
 
      $moduleName = $request->getModuleName();
 
      if($moduleName == 'admin'){
        // seulement pour le module admin
        $auth = Zend_Auth::getInstance();
        if(!$auth->hasIdentity()){
          // si l'utilisateur n'est pas authentifier, on le renvoie vers user/login
          $controllerName = $request->getControllerName();
          $actionName = $request->getActionName();	
          if($controllerName != 'auth')
            $request->setActionName('login')->setControllerName('auth');
          }
        }
      }
}
et dans ton bootstrap tu rajoute un :
Code :
self::$frontController->registerPlugin(new My_Controller_Plugin_Auth());
benji07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 16h47   #3
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Bonjour,

Je pense que si ça ne fonctionne pas, c'est que la méthode dispatch() s'occupe de retrouver les module, contrôleur et action à partir des données de la requête. Il faudrait donc plutôt redéfinir l'URI dans l'objet Zend_Controller_Request_Http, et pas les module / contrôleur / action.

Sinon, une autre solution serait de créer une route différente, quelque chose comme :
Code :
1
2
3
$router = $frontctrl->getRouter();
$route = new Zend_Controller_Router_Route('*', array('module' => 'maintenance', 'controller' => 'toto', 'action' => 'titi'));
$router->addRoute('default', $route);
Edit : pour revenir sur l'objet Zend_Controller_Request_Http, il faudrait probablement faire quelque chose comme :
Code :
1
2
$request = new Zend_Controller_Request_Http('/maintenance/toto/titi');
$frontController->dispatch($request);
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 16h52   #4
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
Hello,

mErci pour vos réponses..

Je vais plutôt utiliser la solution de Eusebe qui est plus simple à mettre en place.

Merci encore:
.
__________________
- Blog
- stages-aikido.fr
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 21h30   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Peut être une réponse un peu brute : si ton site est en maintenance, pourquoi ne pas remplacer provisoirement ton index.php par une page statique d'info maintenance ?
Cela te permettrait de maintenir alors tranquillement tous les scripts. Sinon, avec les autres méthodes, tu ne doit pas toucher au moins au ZF, et à tes controller/view de maintenance.
Une fois la maintenance terminée, tu écrases par ftp ton index.php en le remplaçant par le bootstrap et le tour est joué. Certes, ce n'est pas très élégant , mais cela me semble très efficace.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 22h28   #6
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Citation:
Envoyé par vg33 Voir le message
Peut être une réponse un peu brute : si ton site est en maintenance, pourquoi ne pas remplacer provisoirement ton index.php par une page statique d'info maintenance ?
Le problème avec cette méthode c'est que si les internautes ont un lien vers un des tes produits ou n'importe quelle autre page que la page index.php dans leur favoris ca ne marche pas, y compris dans les recherches sur les moteurs de recherche.

Je pense que le mieux est de modifier provisoirement le htaccess avec un temporary moved sur une page de maintenance, je pense qu'on peut faire ca.

Edit : Trouvé sur un site qqconque :
Code :
1
2
3
4
5
6
 
RewriteEngine on
# optionally exclude your own IP from being redirected
# RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89
RewriteCond %{REQUEST_URI} !/maintenance\.html$
RewriteRule ^(.*)$ /maintenance.html [R=503,L]
Citation : This serves maintenance.html with a "503 Service Unavailable" status on every request.
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 22h52   #7
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Citation:
Envoyé par ThomasR Voir le message
Le problème avec cette méthode c'est que si les internautes ont un lien vers un des tes produits ou n'importe quelle autre page que la page index.php dans leur favoris ca ne marche pas, y compris dans les recherches sur les moteurs de recherche.
Si, ça fonctionne si il a mis en place le ZF avec MVC (ce qui est le cas) : toutes les requêtes sont dirigées vers index.php...
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 23h26   #8
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par Eusebe Voir le message
Si, ça fonctionne si il a mis en place le ZF avec MVC (ce qui est le cas) : toutes les requêtes sont dirigées vers index.php...
+1.
De plus, tu peux envoyer par php un header 503 dans ta page statique sans toucher au htaccess.
Je vois aussi un autre avantage, celui de personnaliser très facilement la page de maintenance.
Maintenant, il y a dans ce sujet 3 ou 4 méthodes, ça laisse le choix !
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 23h46   #9
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
Merci encore pour vos réponses.
A+
__________________
- Blog
- stages-aikido.fr
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h24.


 
 
 
 
Partenaires

Hébergement Web