FOSJSRoutingBundle: "la Route xxx n'existe pas"
je me pose vraiment un problème bizarre avec FOSJSRoutingBundle :
tout d'abord, voici ma configuration : je travaille sur Symfony 2.0.23 et avec JQuery, sur Windows 7 64 bits avec un WAMP (Apache 2.4.2 et PHP 5.4.3). J'ai fait tous les réglages du Github de FOSJSRoutingBundle et j'ai exposé mes routes ( presque tous les problèmes que j'ai pu trouver en googlant (sur le Github de FOSJSRoutingBundle,ici et sur différents forums) étaient parce que les gens n'ont pas exposé leurs routes, mais j'ai essayé l'application php / console fos:js-routing: debug et je vois mes routes). Le js est ajouté au layout (code du layout à la fin).
en essayant de générer une url pour les routes dans js, au début je voulais générer deux routes différentes mais pour test j'ai créé le code js ci-dessous :
//Code inside this function is working
$("select").change(function () {
param=this.options[this.selectedIndex].value;
test1=Routing.generate('myBundle_step3', { myParam: param });
alert(test1);
window.location=Routing.generate('myBundle_step2');
});
//Code inside this one is also working
$('input[type="checkbox"]').change(function() {
test=Routing.generate('myBundle_step2');
}).change();
//This is not working
test=Routing.generate('myBundle_step2');
alert(test);
Avec ce code, j'obtiens l'erreur javaScript "La route myBundle_step2 n'existe pas". Bien que la première partie fonctionne toujours (alert me donne le lien créé et le la redirection se passe bien). Si je supprime la seconde fonction, Je n'obtiens plus L'erreur Javascript. Si dans la seconde fonction je remplace step2 par step3, l'erreur devient "la route myBundle_step3 n'existe pas". J'ai essayé de vider le cache et d'exécuter l'application php/console asset:install --symlink à nouveau, mais sans résultat.
voici le code correspondant au controller (le vrai code est un peu long et je ne pense pas qu'il soit pertinent, si vous le pensez, je pourrais le mettre de toute façon :
namespace myBundleController;
class IndividuController extends Controller
{
public function step2Action() {
Some code
}
public function step3Action($myParam) {
Some code
}
}
Le routage.yml fichier de config par rapport à l'ensemble :
myBundle_step2:
pattern: /step/2
defaults: {_controller: myBundle:Individu:step2}
options:
expose: true
myBundle_step3:
pattern: /step/3/{myParam}
defaults: {_controller: myBundle:Individu:step3}
options:
expose: true
app/config/routing.fichier yml :
fos_js_routing:
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"
myBundle:
resource: "@myBundle/Resources/config/routing.yml"
prefix: /
informations pertinentes de la mise en page :
<!-- jQuery via Google + local fallback, see h5bp.com -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"> </script>
<script>window.jQuery || document.write('<script src="js/jquery-1.7.1.min.js"></script>')</script>
{% javascripts 'bootstrap/js/bootstrap.js'
'bundles/fosjsrouting/js/router.js'
'bundles/crrisuaps/js/suaps.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
</body>
</html>
résultat du routeur app/console php: debug (Je n'ai laissé que les informations pertinentes + j'ai laissé la notification de variable non définie juste au cas où, c'est une notification que j'ai reçue depuis que j'ai ajouté cette bibliothèque, encore la bibliothèque fonctionne et je ne pense pas que le problème pourrait venir d'ici :
C:wampwwwsuapsReposuaps>php app/console router:debug
Notice: Undefined variable: kPathUrl in C:wampwwwsuapsReposuapsvendorhtml2
pdf_classtcpdfConfig.php on line 80
Call Stack:
0.0070 231536 1. {main}() C:wampwwwsuapsReposuapsappconsole:0
0.0209 685656 2. require_once('C:wampwwwsuapsReposuapsappbootstr
ap.php.cache') C:wampwwwsuapsReposuapsappconsole:10
0.0212 701752 3. require_once('C:wampwwwsuapsReposuapsappautoloa
d.php') C:wampwwwsuapsReposuapsappbootstrap.php.cache:3
0.1335 2998152 4. require_once('C:wampwwwsuapsReposuapsvendorhtml
2pdfhtml2pdf.class.php') C:wampwwwsuapsReposuapsappautoload.php:51
0.1379 3361792 5. require_once('C:wampwwwsuapsReposuapsvendorhtml
2pdf_classmyPdf.class.php') C:wampwwwsuapsReposuapsvendorhtml2pdfhtml2p
df.class.php:19
0.1385 3393792 6. require_once('C:wampwwwsuapsReposuapsvendorhtml
2pdf_classtcpdfConfig.php') C:wampwwwsuapsReposuapsvendorhtml2pdf_class
myPdf.class.php:12
[router] Current routes
Name Method Pattern
_assetic_55f0319 ANY /css/55f0319.css
_assetic_55f0319_0 ANY /css/55f0319_bootstrap_1.
css
_assetic_55f0319_1 ANY /css/55f0319_bootstrap-re
sponsive_2.css
_assetic_55f0319_2 ANY /css/55f0319_style_3.css
_assetic_3608a04 ANY /js/3608a04.js
_assetic_3608a04_0 ANY /js/3608a04_bootstrap_1.j
s
_assetic_3608a04_1 ANY /js/3608a04_router_2.js
_assetic_3608a04_2 ANY /js/3608a04_suaps_3.js
fos_js_routing_js ANY /js/routing.{_format}
myBundle_homepage ANY /
myBundle_inscription_etape1 ANY /inscription/etape/1
myBundle_inscription_etape2 ANY /inscription/etape/2
myBundle_inscription_etape3 ANY /inscription/etape/3/{dis
ciplineSelection}
Résultat de php app/console fos:js-routage:debug (j'ai enlevé la notice PHP mais cela se produit à chaque commande je fais d'ailleurs) :
C:wampwwwsuapsReposuaps>php app/console fos:js-routing:debug
[router] Current routes
Name Method Pattern
crrisuapsBundle_inscription_etape2 ANY /inscription/etape/2
crrisuapsBundle_inscription_etape3 ANY /inscription/etape/3/{disciplineSelect
ion}
Edit : Aussi, je ne sais pas si c'est pertinent, mais lorsque j'essaie de "php app/console fos:js-routage:debug myBundle_step2" je reçois la suite d'erreur php :
[Exception D'Erreur] Attention: argument manquant 3 pour SymfonyBundleFrame BrundleCommandRouterDebugCommand: outputRoute (), appelé C:symfonyDirectoryvendorbundlesFOSJsRoutingBundleCommandRouterDebugExposedCommand.php sur la ligne 62 et défini dans C:serverDirectoryvendorsymfonysrcSymfonyBundleFrameworkBundleCommandRouterDebugCommand.php à la ligne 98
3 réponses
j'ai aussi eu ce problème. Réglage de l' options.expose
paramètre sur la configuration du routage résolu pour moi.
routage.yml
cart_edit:
pattern: /Cart/edit
defaults: { _controller: CartCartBundle:Default:cart_edit }
options:
expose: true
mon.js
var url = Routing.generate('cart_edit');
$.post(url, function(data) {
//do somthing
});
changer au besoin. Espérons que cela permettra de résoudre votre problème.
j'ai eu le même problème et le problème était dans mon fichier de config. Essayez de vérifier pour ceci:
# app/config/config.yml
fos_js_routing:
routes_to_expose: [ myBundle_step2, myBundle_step3, ... ]
Juste pour être complet: il est également possible d'utiliser des annotations (options={"expose"=true}
) comme expliqué dans l' documentation:
// src/AppBundle/Controller/DefaultController.php
/**
* @Route("/foo/{id}/bar", options={"expose"=true}, name="my_route_to_expose")
*/
public function indexAction($foo) {
// ...
}
cela fonctionne aussi pour les réglages de routes au niveau du contrôleur (exemple d'un de mes contrôleurs):
/**
* Channel controller.
*
* @Route("account/{account}/todos", options={"expose"=true})
* @ParamConverter("account", class="AppBundle:Account", options={
* "repository_method" = "findOneById",
* "mapping": {"account": "id"},
* "map_method_signature" = true
* })
*/
class TodoListController extends Controller
{