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 21/12/2006, 11h28   #1
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Par défaut Problème avec MVC

Bonjour,

Sa fais 5 jours que j'essaye de faire fonctionner l'architecture MVC avec le framework de Zend...

Voici la structure de mon site (conseillé par Zend):

/app
/models
/views
/controllers
/document_root
/images
/styles
.htaccess
index.php
/lib
/Zend
Zend.php
ensuite dans mon index.php je fais un set_include_path pour que sa pointe sur le dossier lib.

Voici mes deux fichiers index.php et IndexController.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// IndexController.php
Zend::loadClass('Zend_Controller_Action');
 
class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        echo 'IndexController::indexAction()';
    }
 
	public function noRouteAction()
    {
        echo 'No route Action';
    }
}
?>
Code :
1
2
3
4
5
6
7
8
9
10
<?php
// Index.php
set_include_path(".;E:\web\htdocs\\test\mvc\lib\\");
 
require_once 'Zend/Controller/Front.php';
 
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('../app/controllers');
$controller->dispatch();
?>
Voilà alors mes deux pages sont extêment basic, l'url rewriting fonctionne. Mais ce qui fonctionne pas c'est l'appel de IndexController.php si je tape http://localhost/MonSiteMVC/controller/action il devrait entrer dans le no route action pour me dire que le controlleur n'existe pas! Mais sa ne fonctionne pas.

Quelqu'un sait pourquoi??

Merci d'avance.
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2006, 13h41   #2
Membre à l'essai
 
Développeur informatique
Inscription : avril 2002
Messages : 22
Détails du profil
Informations personnelles :
Âge : 31

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2002
Messages : 22
Points : 21
Points : 21
Envoyer un message via MSN à korbier
Bonjour,

Quand tu dis que ca ne fonctionne pas, que se passe-t-il exactement ? Message d'erreur ? rien qui ne s'affiche ?

Peux tu nous mettre les lignes de configuration de l'url rewriting de ton httpd.conf, stp.

[edit]
L'action pour le quand il n'y a pas de routage, se nomme noRoute et non pas noRouteAction
[/edit]
korbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2006, 15h16   #3
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Justement absolument rien ne s'affiche! Mais si je fais un echo "Hello World" sur ma page sa s'affiche... donc il ne doit pas y avoir d'erreur... J'ai essayé de mettre juste noRoute() mais il n'y a toujours rien qui s'affiche... alors dans le httpd.conf j'ai simplement enlevé le # devant le LoadModule rewrite_module modules/mod_rewrite.so puis j'ai ajouté un fichier .htaccess dans le document_root qui contient les lignes suivante:
Code :
1
2
3
4
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2006, 08h46   #4
Membre à l'essai
 
Développeur informatique
Inscription : avril 2002
Messages : 22
Détails du profil
Informations personnelles :
Âge : 31

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2002
Messages : 22
Points : 21
Points : 21
Envoyer un message via MSN à korbier
J'ai fait quelques essais sur la configuration de l'url rewriting (j'ai teste en mettant les lignes a la fin du httpd.conf et non pas dans un .htacces).
Avec
Code :
1
2
3
4
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
Ca ne marche pas

Par contre avec
Code :
1
2
3
RewriteEngine on
RewriteLog "D:\html_5\log\rewrite.log"
RewriteRule !\.(js|ico|gif|jpg|png|css|php)$ /index.php
Ca passe, j'ai bien "No route Action" qui s'affiche.

Pour le contenu des autres fichiers, tout est exactement pareil que ce que tu as donné.

Au passage, J'ai dis des betises, c'est bien "noRouteAction" et non pas "noRoute"
korbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2006, 09h05   #5
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Quand je change mon fichier .htacces et que je renome ma fonction en "noRouteAction()" j'ai l'erreur suivante:
Code x :
1
2
3
4
5
6
7
8
9
Objet non trouvé!

L'URL requise n'a pu etre trouvée sur ce serveur. Si vous avez tapé l'URL à la main, veuillez vérifier l'orthographe et réessayer.

Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le gestionnaire du site.
Error 404
localhost
12/22/06 09:04:36
Apache/2.2.3 (Win32) DAV/2 mod_ssl/2.2.3 OpenSSL/0.9.8d mod_autoindex_color PHP/5.2.0
et si j'ajoute à la fin de mon fichier httpd.conf alors le navigateur m'indique qu'il y a une erreur de redirection.

Franchement je ne sais vraiment plus quoi faire... J'ai déjà essayer 5 tuto différents et chaque fois je bloque à la même place!
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2006, 16h00   #6
Membre à l'essai
 
Développeur informatique
Inscription : avril 2002
Messages : 22
Détails du profil
Informations personnelles :
Âge : 31

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2002
Messages : 22
Points : 21
Points : 21
Envoyer un message via MSN à korbier
Peux tu essayer avec les trois lignes qui fonctionnent chez moi stp ?
korbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2006, 14h33   #7
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Alors j'ai essayé avec les 3 lignes qui fonctionnent chez toi. Si je les met dans mon fichier .htaccess sa me crée une erreur interne. Et si je vais les ajouter à la fin de mon fichier httpd.conf alors tous le serveur bug et sa me met "Redirection de page incorrect". Si jamais comme serveur web j'ai mis xampp.
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2006, 23h51   #8
Membre actif
 
Inscription : décembre 2002
Messages : 325
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2002
Messages : 325
Points : 187
Points : 187
Si j'étais toi, je reprendrais la configuration complète de l'environnement.
Si tu peux te le permettre évidemment.

Tout bien considéré, il n'y en a pas pour très longtemps et en le refaisant, et en comprenant ce que tu fais, ça sera sans doute plus formatteur que d'essayer les différentes "solutions" qui te sont données ici.

Il y a peut-être quelque chose que tu as raté dans la config de Apache ou de PHP, ou même dans l'utilisation du framework.

Mais ça n'est qu'un conseil, fais comme tu le sens.
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 21h40   #9
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
noRouteAction a été supprimé au passage en version 0.6, les autres, vous devez utiliser la version 0.2.

Les developpeurs nous conseillent d'utiliser un __call() , le problème c'est qu'il se passe après que le Dispatcher aie été lancé par le controlleur, et il génère une exception si le controleur n'existe pas.

On peut ainsi attraper une action non définie, mais plus un controlleur non définit ( zut )

Pour régler ton problème, il faut ruser en utilisant Zend_Controller_Plugin, on peut intervenir sur le Dispatcher et le modifier afin de le faire pointer vers un noroute du controleur par défaut ( index ). norouteAction de IndexController, c'est bien ca


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 class PluginNotFound extends Zend_Controller_Plugin_Abstract
  {
      public function preDispatch($request)
      {
          $dispatcher = Zend_Controller_Front::getInstance()
                        ->getDispatcher();
 
          if (!$dispatcher->isDispatchable($request))
          {
 
$request->setControllerName($dispatcher->getDefaultController())
                      ->setActionName('noroute')
                      ->setDispatched(false);
          }
      }
  }
 
// ... initialisation du controlleur.
$frontController->registerPlugin(new PluginNotFound()); // on intercepte le Dispatcher et on le remonte, via un plugin
$frontController->throwExceptions(true) // on affiche les exceptions
$frontController->dispatch() // on envoie le dispatcher.
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 19h52   #10
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
C'est cool sa avance un peu... maintenant sa m'affiche no route action! Sa marche! Mais maintenant si je vais créer un fichier FooController.php dans le dossier controllers et que dedans je créer l'action barAction() et que je tape l'url monsite/Foo/bar et bien sa m'affiche toujours no route action ne trouve-t-il pas le controller ?
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 20h48   #11
Membre à l'essai
 
Inscription : janvier 2007
Messages : 34
Détails du profil
Informations personnelles :
Localisation : Luxembourg

Informations forums :
Inscription : janvier 2007
Messages : 34
Points : 22
Points : 22
Par défaut partir dun exemple qui marche

Concernant le framework Zend il y a un bon tutorial MVC sur le site http://www.akrabat.com/wp-content/up...mework_122.pdf
avec le code de l'exemple a telecharger sur http://www.akrabat.com/wp-content/up...torial_120.zip

J'ai installe Wampserver (aucun parametre a changer)
j'y ai copie le code dont je viens de te donner le lien
j'ai cree dans PHPMyAdmin un user rob avec mot de passe 123456 (page 11 du tutorial) et je lui ai donne tous les droits
J'ai cree dans PHPMyAdmin une nouvelle base zftest
j'ai execute dans PHPMyAdmin les 2 requetes SQL de la page 12 du tutorial
et j'ai tape http://localhost/zf-tutorial/ dans mon browser

Temps total : 7 minutes
pour avoir un exemple tres interessant, qui marche et que tu peux decortiquer calmement.

Faut pas se prendre la tete....

Eric
Ericx_25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 23h14   #12
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
Citation:
Envoyé par Yoteco
C'est cool sa avance un peu... maintenant sa m'affiche no route action! Sa marche! Mais maintenant si je vais créer un fichier FooController.php dans le dossier controllers et que dedans je créer l'action barAction() et que je tape l'url monsite/Foo/bar et bien sa m'affiche toujours no route action ne trouve-t-il pas le controller ?
Tu dois avoir un problème ailleurs alors, je ne vois, chez moi ca fonctionne très bien.

Ericx_25-> En effet, j'étais justement en train de créer une adaptation française de ce tuto pour un article sur dev.com ^^
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 11h38   #13
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Ok merci beaucoup!
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 15h22   #14
Invité régulier
 
Inscription : janvier 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 14
Points : 7
Points : 7
bonjour à tous
voici quelques jours que je suis sur l'instalation de Zend et toujours rien !!
en effet j'ai le même soucie que Yoteco
rien ne s'affiche sur ma page index

afin de suivre un autre chemin j'ai recommencé une installe sur le modele d'écris par Eric et zf-tutorial,

mais _____

"Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'SQLSTATE[28000] [1045] Access denied for user 'rob'@'localhost' (using password: YES)' in E:\Appli\wamp\www\myhope\Zend\Db\Adapter\Pdo\Abstract.php:111 Stack trace: #0 E:\Appli\wamp\www\myhope\Zend\Db\Adapter\Abstract.php(146): Zend_Db_Adapter_Pdo_Abstract->_connect() #1 E:\Appli\wamp\www\myhope\Zend\Db\Adapter\Abstract.php(309): Zend_Db_Adapter_Abstract->query('DESCRIBE album', NULL) #2 E:\Appli\wamp\www\myhope\Zend\Db\Adapter\Pdo\Mysql.php(86): Zend_Db_Adapter_Abstract->fetchAll('DESCRIBE album') #3 E:\Appli\wamp\www\myhope\Zend\Db\Table.php(181): Zend_Db_Adapter_Pdo_Mysql->describeTable('album') #4 E:\Appli\wamp\www\myhope\Zend\Db\Table.php(123): Zend_Db_Table->_setup() #5 E:\Appli\wamp\www\myhope\application\controllers\IndexController.php(15): Zend_Db_Table->__construct() #6 E:\Appli\wamp\www\myhope\Zend\Controller\Dispatcher.php(436): IndexController->indexAction() #7 E:\Appli\wamp\www\myhope\Zend\Controller\Front.php(725): Zend_Controller_Dis in E:\Appli\wamp\www\myhope\Zend\Db\Adapter\Pdo\Abstract.php on line 111"

Pourtant :
rob localhost Oui ALL PRIVILEGES Oui

est ce dans configuration de mon serveur ?


sinon pour l'installation classique de zend, où place ton la class proposé par doctorrock, et comment et d'où l'appel ton ?

désolé de mon ignorance !!

merci
ibarato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 15h32   #15
Invité régulier
 
Inscription : août 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 12
Points : 7
Points : 7
pour etre sure que ce n'es pas ta config, tu peut verifier

1-que l'extention pdo_mysql est charger
2-que tu utilise bien la version 0.6 du framework et que t'a bien php 5.1.x
3-l'url rewriting dans apache

et normalement tout devrai allez comme sur des roulette ^^
sinleon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 15h44   #16
Invité régulier
 
Inscription : janvier 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 14
Points : 7
Points : 7
pdo_mysql ok!
version 0.6 du framework ok, pour php comment je peux verifier sous wamp ?
pour apache j'ai activé le module rewrite à present url_rewrite ou est ce ?
dans httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so ?
cela c'est fait !

merci
ibarato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 15h56   #17
Invité régulier
 
Inscription : août 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 12
Points : 7
Points : 7
wamp c'est php 5.2 donc sa doit etre le programme
sinleon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h01   #18
Invité régulier
 
Inscription : août 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 12
Points : 7
Points : 7
voici a quoi resemble mon index.php et sa marche tres bien

Code :
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
 <?php
 
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/London');
 
set_include_path('.'.PATH_SEPARATOR.'./library'.PATH_SEPARATOR.'./appli/moduls'.PATH_SEPARATOR.get_include_path());
 
include_once('Zend.php');
 
// class loading
Zend::loadClass('Zend_Controller_Front');
Zend::loadClass('Zend_Controller_RewriteRouter');
Zend::loadClass('Zend_View');
Zend::loadClass('Zend_Db');
Zend::loadClass('Zend_Db_Table');
Zend::loadClass('Zend_Filter_Input');
Zend::loadClass('Zend_Config_Ini');
 
Zend::register('post',new Zend_Filter_Input($_POST));
 
//Recuperation des infos de connexion a la base du fichier ini
 
$db = new Zend_Config_Ini('./appli/config.ini','general');
 
$base_url = substr($_SERVER['PHP_SELF'],0,strpos($_SERVER['PHP_SELF'],'/index.php'));
 
//traitement des vues
$view = new Zend_View();
$view->setScriptPath('./appli/views');
Zend::register('view',$view);
 
// traitement des controlles
$control = Zend_Controller_Front::getInstance();
$control->setBaseUrl($base_url);
$control->setControllerDirectory('./appli/controllers');
$control->dispatch();
sinleon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h01   #19
Invité régulier
 
Inscription : janvier 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 14
Points : 7
Points : 7
cool !!
super cool cela fonctionne
un grand merci :-)
ibarato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 16h07   #20
Invité régulier
 
Inscription : janvier 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 14
Points : 7
Points : 7
je continue ma decouverte !!
à partir de zf-tutorial
ibarato 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 16h01.


 
 
 
 
Partenaires

Hébergement Web