[Symfony] routage symfony

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Symfony] routage symfony

Re: [Symfony] routage symfony

par zeus » 26 mars 2010, 12:34

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.

Re: [Symfony] routage symfony

par rs232 » 26 mars 2010, 12:26

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: routage symfony

par zeus » 08 mars 2010, 00:17

Je suis à deux doigts de te demander de me transmettre ton application, que j'essaye chez moi ...

Re: routage symfony

par Superpilou » 05 mars 2010, 16:49

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

par Superpilou » 04 mars 2010, 18:43

Non pour le routage j'ai juste touché à routing.yml

Re: routage symfony

par zeus » 04 mars 2010, 18:35

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

par Superpilou » 04 mars 2010, 18:07

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

par zeus » 04 mars 2010, 15:40

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

par Superpilou » 04 mars 2010, 14:53

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

par zeus » 04 mars 2010, 13:23

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

par Superpilou » 04 mars 2010, 12:17

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

par zeus » 27 févr. 2010, 15:51

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

par pascaltje » 27 févr. 2010, 14:05

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

par zeus » 27 févr. 2010, 01:07

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));

[Symfony] routage symfony

par Superpilou » 25 févr. 2010, 19:05

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.