Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
C'est certainement une erreur très bête ou un oubli évident, mais je suis débutant et j'ai un soucis avec le controller que j'ai créé.
Je suis bien passé par la commande create controller Moncontroller
puis
create action ajouter moncontroller
etc...
J'ai configuré le fichier MoncontrollerController.php pour y remplir les méthodes.
Seulement quand je vais sur l'URL : http://localhost/mon_appli/public/moncontroller
URL inexistante !
Y a-t-il une autre étape après les create controller / create action pour pouvoir se servir du controller ?
Merci
Dernière modification par Ariaron (16-04-2010 10:10:33)
Hors ligne
Le plus simple c'est de mettre ton code parce que perso j'ai rien compris :x
Tu as créé quel arborescence de fichier?
Ton fichier index.php (ou bootstrap) ressemble à quoi?
Ton fichier MoncontrollerController.php quel tete à t-il...
Sinon on peut pas vraiment t'aider!
Hors ligne
Voici pour le bootstrap :
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $moduleLoader; } protected function _initViewHelpers() { $this->bootstrap('layout'); $layout = $this->getResource('layout'); $view = $layout->getView(); $view->doctype('XHTML1_STRICT'); $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); $view->headTitle()->setSeparator(' - '); $view->headTitle('Syrhano'); } }
( Syrhano est le nom de l'appli ).
En fait, j'ai suivi un tutoriel de developpez.net et tout fonctionne bien quand je suis sur le controller Index, les ajouts, modifs et suppressions dans la base de données.
J'ai essayé de créer un autre controller (Etablissement) et de copier dans Etablissement le même code que celui qui fonctionnait dans index ( car je voudrais réserver l'index à la page d'accueil du site ). Mais là, ça ne fonctionne pas.
Voici l'arborescence de mon dossier Application :
|-- application
| |-- Bootstrap.php
| |-- configs
| | |-- application.ini
| |-- controllers
| | |-- ErrorController.php
| | |-- EtablissementController.php
| | |-- IndexController.php
| |-- forms
| | |-- Etablissement.php
| |-- layouts
| | |-- layout.phtml
| |-- models
| | `-- DbTable
| | |-- Etablissements.php
| `-- views
| |-- helpers
| | `-- BaseUrl.php
| `-- scripts
| |-- error
| | `-- error.phtml
| |-- etablissement
| | |-- ajouter.phtml
| | |-- index.phtml
| | |-- modifier.phtml
| | `-- supprimer.phtml
| `-- index
| |-- ajouter.phtml
| |-- ajouter.phtml~
| |-- index.phtml
| |-- index.phtml~
| |-- modifier.phtml
| |-- modifier.phtml~
| |-- supprimer.phtml
| `-- supprimer.phtml~
Merci
Dernière modification par Ariaron (16-04-2010 10:43:57)
Hors ligne
Ah et pardon, j'oubliais l'autre fichier, EtablissementController.php il a cette forme là :
<?php class EtablissementController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { .... } public function ajouterAction() { .... } public function modifierAction() { .... } public function supprimerAction() { .... } }
Je ne détaille pas les méthodes, ce serait long... mais ce sont exactement les mêmes que lorsqu'elles fonctionnaient dans le controller Index.
Dernière modification par Ariaron (16-04-2010 10:49:10)
Hors ligne
Je ne vois pas ton Zend_Layout::startMvc(), est-ce normal ?
Hors ligne
Je ne connais pas cette méthode, on est sensés la mettre où ?
Si le soucis vient de cette méthode, je me demande pourquoi ça fonctionne sous le controller index.
Ce qui est aussi perturbant, c'est que chaque tuto qu'on trouve sur le net a des approches très différentes de Zend...
Hors ligne
Il doit manquer un fichier ou tu défini les chemin vers la librairie, etc. C'est celui-ci qui m'intéresse
Hors ligne
application.ini ?
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 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 = 0 phpSettings.date.timezone = "Europe/Paris" resources.db.adapter = PDO_MYSQL resources.db.params.host = localhost resources.db.params.username = root resources.db.params.password = **** resources.db.params.dbname = services_syrhano resources.layout.layoutpath = APPLICATION_PATH "/layouts" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
Dernière modification par Ariaron (16-04-2010 11:07:06)
Hors ligne
Perso, je ne passe pas par le bootstrap mais par un index ce qui est sensiblement la même chose.
Dans mon index je fais :
... $options = array('layoutPath' => $appPath . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'layouts'); Zend_Layout::startMvc($options); try { $fc->dispatch(); // $fc est mon front controller } catch (Zend_Exception $e) { echo $e->getMessage(); }
Je ne sais pas si sa peut t'aider, mais essaye quand même.
Hors ligne
Merci, j'ai essayé mais avec ça, plus rien ne fonctionne, même avec le controller Index. La page reste blanche.
(Peu importe où je met le code : j'ai essayé dans chacune des deux méthodes).
Hors ligne
Bon, un collègue m'a filé des bouquins, je vais me démerder, j'y connais vraiment trop rien donc je vais pas vous faire perdre votre temps.
Merci pour vos réponses.
Hors ligne
Tu dois avoir un fichier index.php
Bref c'est comme tu veux!
Hors ligne
Oui, voici mon fichier public/index.php :
<?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Hors ligne
Et quand tu vas sur : http://localhost/mon_appli/public/etablissement/index ça t'affiche une page blanche alors que http://localhost/mon_appli/public/index fonctionne? Tu as bien rempli les vue de ton controller Etablissement?
Hors ligne
http://localhost/mon_appli/public/etablissement/index : le navigateur ne trouve pas l'URL.
Par l'index, ça fonctionne bien oui. Les vues du controller Etablissement sont, pour l'instant, remplies par une ligne de test.
Hors ligne
Je pense que le contrôleur frontal a besoin qu'on lui indique l'url de base :
$frontController = Zend_Controller_Front::getInstance();
$frontController->setBaseUrl('http://localhost/mon_appli/public/') ;
En créant un virtual host cela serait plus simple. Et si ça ne fonctionne toujours pas il faut regarder au niveau du .htaccess.
Hors ligne
Je met ça où ? Dans index.php ?
Sinon, voici mon fichier .htaccess :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
J'ai également verifié que mon serveur Apache avait bien le module rewrite activé.
Hors ligne
Dans le bootstrap.php, par exemple dans une méthode _initBaseUrl()
Pour le htaccess:
RewriteBase /mon_appli/public/
après RewriteEngine on
Encore une fois il vaudrait mieux prendre le temps de créer un virtual host, ça poserait moins de problèmes.
Hors ligne
Ça ne fonctionne toujours pas. Je vais voir pour le virtual host.
Merci
Hors ligne
Ce qui serait utile ce serait d'avoir le message d'erreur.
Hors ligne
Voici l'erreur que j'avais :
The requested URL /syrhano2/public/etablissement was not found on this server.
Bon sinon là j'ai configuré un virtual host rapidement, donc j'arrive à aller sur la page principale ( celle du controleur index : http://syrhano.zf.localhost/ ), mais dès que je veux passer sur http://syrhano.zf.localhost/etablissement/, encore une erreur :
The server encountered an internal error or misconfiguration and was unable to complete your request.
Hors ligne
http://syrhano.zf.localhost/index.php/etablissement/
Si cela fonctionne ça signifie qu'il faut simplement configurer une route.
Hors ligne
Oui, ça fonctionne ! Ah, un peu de bonne humeur avant le week-end, merci.
Hors ligne
Re bonjour à tous,
Je vois un peu comment créer une route statique, mais pour passer de
http://syrhano.zf.localhost/index.php/etablissement/
à
http://syrhano.zf.localhost/etablissement/ , c'est sûrement très simple mais je ne vois pas !
Merci
Hors ligne
Il faut surement que tu créé un virtual host
<VirtualHost *:80> ServerAdmin mail@maill.fr DocumentRoot C:/wamp/www/localhost ServerName localhost ServerAlias http://localhost <Directory C:/wamp/www/localhost> DirectoryIndex index.php Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
ou sinon dans application.ini mettre
resources.frontController.baseUrl = "http://syrhano.zf.localhost/pubic/"
J'espère que cela pourra t'aider
Hors ligne