Page 1 sur 1
[Symfony] routage symfony
Posté : 25 févr. 2010, 19:05
par Superpilou
Bonjour depuis ce matin je me prends la tête avec le routage de Symfony.
Bon, je fais du routage en utilisant doctrine.
En gros j'ai une liste de news et quand je clique sur le texte de la news ca affiche la new.
Ca marche en temps normal sauf quand je fais du routage avec Symfony.
Voici le fichier php affichant les news
<!--appel du css -->
<?php use_stylesheet ('actus.css')?>
<div id='actus'>
<h1>Toutes les actualités</h1>
<table>
<tbody>
<?php foreach ($news_list as $news): ?>
<tr>
<td class='actu_titre'>
<a href="<?php echo url_for (array('sf_route' => 'actualite_show_user', 'sf_subject' => $news)) ?>">
<?php echo $news->getNTitre() ?>
</a>
</td>
<td class='actu_date'><?php echo $news->getNDate() ?></td>
</tr>
<tr>
<td class='actu_contenu'><?php echo $news->getNContenu() ?></td>
</tr>
<tr>
<td class='actu_auteur'><?php echo $news->getNAuteur() ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<!-- <a href="<?php echo url_for('Actualite/new') ?>">New</a>-->
Voici mon fichier de routage en YAML.
Code : Tout sélectionner
url: /
param: { module: Actualite, action: index }
default_index:
url: /:module
param: { action: index }
default:
url: /:module/:action/*
actualite_show_user:
url: /Actualite/:titre_slug/:auteur_slug
class: sfDoctrineRoute
options: { model: news, type: object }
param: { module: Actualite, action: show }
requirements:
id: \d+
sf_method: [get]id
Merci d'avance pour votre aide.
Re: routage symfony
Posté : 27 févr. 2010, 01:07
par zeus
Encore et toujours, il manque des messages d'erreur, des comportements. Parce qu'un simple "ça ne marche pas", ça n'aide en RIEN.
Bon, sinon, concernant l'utilisation de url_for(), j'avoue que je ne l'ai jamais vu utilisé comme ça (avec un array), je l'ai toujours utilisé comme suit :
url_for('@route_name', array('param1' => 'value1));
Re: routage symfony
Posté : 27 févr. 2010, 14:05
par pascaltje
on n'est pas censés mettre les routes génériques en fin de fichier de routing ?
il est possible que la route soit reconnue par défaut, avant un routing précis.
A+
Pascal
Re: routage symfony
Posté : 27 févr. 2010, 15:51
par zeus
on n'est pas censés mettre les routes génériques en fin de fichier de routing ?
il est possible que la route soit reconnue par défaut, avant un routing précis.
A+
Pascal
Bien vu ! C'est probable.
Mais, de toutes façons, il faudrait en savoir plus sur le comportement pour le confirmer.
Re: routage symfony
Posté : 04 mars 2010, 12:17
par Superpilou
Je suis désolé de ne pas avoir mis toutes les informations.
Je vais le faire maintenant.
Donc quand je clique sur lien ne marchant pas ca m'affiche une page d'erreur:
Code : Tout sélectionner
404 | Not Found | sfError404Exception
Action "Actualite/6emenew" does not exist.
stack trace
* at ()
in SF_SYMFONY_LIB_DIR/controller/sfController.class.php line 202 ...
199. $this->dispatcher->notify(new sfEvent($this, 'application.log', array(sprintf('Action "%s/%s" does not exist', $moduleName, $actionName))));
200. }
201.
202. throw new sfError404Exception(sprintf('Action "%s/%s" does not exist.', $moduleName, $actionName));
203. }
204.
205. // create an instance of the action
......
Merci d'avance
P.S: J'ai mis les routes en défauts en dernier hélas ca fait toujours l'erreur.
Re: routage symfony
Posté : 04 mars 2010, 13:23
par zeus
Il nous faudrait l'url complète que tu essayes.
De plus, le message d'erreur que tu nous montres me laisse penser qu'il a utilisé la route "url: /:module/:action/*" (regarde le module/action qu'il essaye d'utiliser).
Après avoir passé les routes en dessus, est-ce que tu as bien fait un "./symfony cache:clear" ?
Sinon, pour comprendre ce qu'il se passe, il faudrait que tu regardes dans les log (répertoire /log). Petite astuce, supprime tout les fichiers, affiche la page qui plante et tu auras un seul fichier de log, qui commenceras par les routes qu'il a connecté (vérifie déjà que tout marche bien à ce niveau), puis la route que symfony à voulu utilisé pour parser ton url.
Re: routage symfony
Posté : 04 mars 2010, 14:53
par Superpilou
Merci Zeus pour ces réponses.
Le soucis c'est que si il fait appel à "/:module/:action/*" il appel la route par defaut. Pourquoi il appelle pas ma route Actualite_show_user?
Si je la commente ca m'affiche cette erreur:
Code : Tout sélectionner
500 | Internal Server Error | sfConfigurationException
Unable to find a matching route to generate url for params "array ( 'action' => 'new', 'module' => 'Actualite',)".
stack trace
* at ()
in SF_SYMFONY_LIB_DIR/routing/sfPatternRouting.class.php line 401 ...
398. // find a matching route
399. if (false === $route = $this->getRouteThatMatchesParameters($params, $this->options['context']))
400. {
401. throw new sfConfigurationException(sprintf('Unable to find a matching route to generate url for params "%s".', is_object($params) ? 'Object('.get_class($params).')' : str_replace("\n", '', var_export($params, true))));
402. }
403. }
404.
* at sfPatternRouting->generate('', array('action' => 'new', 'module' => 'Actualite'), )
in SF_SYMFONY_LIB_DIR/controller/sfWebController.class.php line 74 ...
71. }
72.
73. // routing to generate path
74. $url = $this->context->getRouting()->generate($route, $parameters, $absolute);
75.
76. if ($fragment)
77. {
* at sfWebController->genUrl('Actualite/new', )
in SF_SYMFONY_LIB_DIR/helper/UrlHelper.php line 88 ...
85.
86. function url_for1($internal_uri, $absolute = false)
87. {
88. return sfContext::getInstance()->getController()->genUrl($internal_uri, $absolute);
89. }
90.
91. /**
* at url_for1('Actualite/new')
in n/a line n/a ...
* at call_user_func_array('url_for1', array('Actualite/new'))
in SF_SYMFONY_LIB_DIR/helper/UrlHelper.php line 115 ...
112. $arguments = func_get_args();
113. if (is_array($arguments[0]) || '@' == substr($arguments[0], 0, 1) || false !== strpos($arguments[0], '/'))
114. {
115. return call_user_func_array('url_for1', $arguments);
116. }
117. else
118. {
* at url_for('Actualite/new')
in SF_ROOT_DIR/apps/frontend/modules/Actualite/templates/indexSuccess.php line 31 ...
Pour le fichier log j'ai fait comme tu m'as dit. Il m'affiche qu'il a parcouru la route par défaut:
Code : Tout sélectionner
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite" (/actualite.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_new" (/actualite/new.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_create" (/actualite.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_edit" (/actualite/:id/edit.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_update" (/actualite/:id.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_delete" (/actualite/:id.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_show" (/actualite/:id.:sf_format)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_show_user" (/Actualite/:titre_slug)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfRoute "homepage" (/)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfRoute "default_index" (/:module)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Connect sfRoute "default" (/:module/:action/*)
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Match route "homepage" (/) for / with parameters array ( 'module' => 'Actualite', 'action' => 'index',)
Mar 04 12:55:53 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter"
Mar 04 12:55:53 symfony [info] {sfFilterChain} Executing filter "sfCommonFilter"
Mar 04 12:55:53 symfony [info] {sfFilterChain} Executing filter "sfExecutionFilter"
Mar 04 12:55:53 symfony [info] {ActualiteActions} Call "ActualiteActions->executeIndex()"
Mar 04 12:55:53 symfony [info] {sfDoctrineLogger} executeQuery : SELECT n.id AS n__id, n.n_titre AS n__n_titre, n.n_date AS n__n_date, n.n_auteur AS n__n_auteur, n.n_contenu AS n__n_contenu, n.n_id AS n__n_id, n.created_at AS n__created_at, n.updated_at AS n__updated_at FROM news n ORDER BY n.id DESC LIMIT 5
Mar 04 12:55:53 symfony [info] {sfPHPView} Render "/home/sfprojects/luxe/apps/frontend/modules/Actualite/templates/indexSuccess.php"
Mar 04 12:55:53 symfony [info] {sfPHPView} Decorate content with "/home/sfprojects/luxe/apps/frontend/templates/layout.php"
Mar 04 12:55:53 symfony [info] {sfPHPView} Render "/home/sfprojects/luxe/apps/frontend/templates/layout.php"
Mar 04 12:55:53 symfony [info] {main} Get slot "title"
Mar 04 12:55:53 symfony [info] {sfWebResponse} Send status "HTTP/1.1 200 OK"
Mar 04 12:55:53 symfony [info] {sfWebResponse} Send header "Content-Type: text/html; charset=utf-8"
Mar 04 12:55:53 symfony [info] {sfWebDebugLogger} Configuration 13.82 ms (10)
Mar 04 12:55:53 symfony [info] {sfWebDebugLogger} Action "Actualite/index" 40.69 ms (1)
Mar 04 12:55:53 symfony [info] {sfWebDebugLogger} Database (Doctrine) 0.00 ms (1)
Mar 04 12:55:53 symfony [info] {sfWebDebugLogger} View "Success" for "Actualite/index" 16.84 ms (1)
Mar 04 12:55:53 symfony [info] {sfWebResponse} Send content (32048 o)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite" (/actualite.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_new" (/actualite/new.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_create" (/actualite.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_edit" (/actualite/:id/edit.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_update" (/actualite/:id.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_delete" (/actualite/:id.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_show" (/actualite/:id.:sf_format)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfDoctrineRoute "actualite_show_user" (/Actualite/:titre_slug)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfRoute "homepage" (/)
Mar 04 12:55:54 symfony [info] {sfPatternRouting} Connect sfRoute "default_index" (/:module)
Re: routage symfony
Posté : 04 mars 2010, 15:40
par zeus
Il y a une ligne de code qui est très intéressante :
Code : Tout sélectionner
Mar 04 12:55:53 symfony [info] {sfPatternRouting} Match route "homepage" (/) for / with parameters array ( 'module' => 'Actualite', 'action' => 'index',)
En 2 mots, cela signifie qu'il a utilisé la route "homepage", qui correspond à l'url qu'il a parsé, et cette url est "/".
En plus clair, ce qui me parait intéressant, c'est que l'url que Symfony essaye de matcher n'est pas une url complète, mais un truc du genre "http://[]/frontend_dev.php"
Re: routage symfony
Posté : 04 mars 2010, 18:07
par Superpilou
Merci oui j'ai remarqué ca.
Avant c'est mon routage qui ne fonctionne pas.
Car la seule route qui marche est la homepage.
Le reste me pose des soucis

Re: routage symfony
Posté : 04 mars 2010, 18:35
par zeus
Ce que je voulais te dire, c'est que la route qui arrive à PHP est "/", pas ta route " /Actualite/bidule/machin".
Si, dans le log, tu vois "/" et pas autre chose, c'est que Symfony ne connait pas autre chose.
Tu n'aurais pas modifié ton .htaccess par hasard ?
Re: routage symfony
Posté : 04 mars 2010, 18:43
par Superpilou
Non pour le routage j'ai juste touché à routing.yml
Re: routage symfony
Posté : 05 mars 2010, 16:49
par Superpilou
J'ai peur d'avoir fait une bêtise car maintenant j'ai une erreur comme celle la:
Code : Tout sélectionner
Not Found
The requested URL /Actualite/6eme+newarf was not found on this server.
Et non plus une levée d'exception.
Re: routage symfony
Posté : 08 mars 2010, 00:17
par zeus
Je suis à deux doigts de te demander de me transmettre ton application, que j'essaye chez moi ...
Re: [Symfony] routage symfony
Posté : 26 mars 2010, 12:26
par rs232
bonjour a tous j'ai pratiquement le même problème,
Code : Tout sélectionner
404 | Not Found | sfError404Exception
Action "general/action" does not exist.
j'ai cette URL
Code : Tout sélectionner
http://localhost/monprojet/web/frontend_dev.php/general/showInfos/action?id_hardware=2
au lieu de celle ci qui marche trés bien pour exécuter mon action
Code : Tout sélectionner
http://localhost/monprojet/web/frontend_dev.php/general/2/showInfos
dois je modifier mon routing.yml? il est par defaut pour le moment
j'ai juste rajouter dans generator.yml une nouvelle action
Code : Tout sélectionner
object_actions:
_edit: { label: Editer }
showInfos: { label: Infos , action: showInfos }
ainsi que mon actions dans actions.class.php
Code : Tout sélectionner
public function executeShowInfos (sfWebRequest $request)
{
$this->hardware = $this->getRoute()->getObject();
$this->setTemplate('showInfos');
}
merci pour votre aide
Re: [Symfony] routage symfony
Posté : 26 mars 2010, 12:34
par zeus
Modération :
rs232, si tu as une autre question ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.
En plus, tu pourras mettre [Résolu] dès que ton problème évoqué ici sera réglé.
Merci de prendre le temps de lire les règlements.