2013-04-16 10 views
16

mam do czynienia z naprawdę dziwny problem z FOSJSRoutingBundle:FOSJSRoutingBundle: „xxx Trasa nie istnieje”

Przede wszystkim, tutaj jest moja konfiguracja: Pracuję nad Symfony 2.0.23 i JQuery, na Windows 7 64 bity z WAMP (Apache 2.4.2 i PHP 5.4.3). Zrobiłem wszystkie ustawienia z github FOSJSRoutingBundle i haved odsłonił moje trasy (prawie wszystkie związane problemy, które mogłem znaleźć przez googling (na github FOSJSRoutingBundle, tutaj i na różnych forach) były, ponieważ ludzie nie ujawnili swoich tras, ale ja wypróbowałem php app/console fos: js-routing: debug i widzę moje trasy). Js jest dodawane do układu (kod układu na końcu).

Próbując wygenerować adres URL dla tras w JS, na początku chciałem wygenerować dwie różne drogi, ale na teście Stworzyłem kod js poniżej:

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

Z tego kodu, pojawia się błąd javascript " Trasa myBundle_step2 nie istnieje ". Chociaż pierwsza część nadal działa (alert daje mi link utworzony i przekierowanie idzie dobrze). Jeśli usunę drugą funkcję, nie otrzymam już błędu Javascript. Jeśli w drugiej funkcji zastępuję krok2 na krok3, błąd staje się "Trasa myBundle_step3 nie istnieje". Próbowałem wyczyścić pamięć podręczną i uruchomić zasoby aplikacji app/console: ponownie zainstaluj --symlink, ale bez rezultatów.

Oto kod kontroler odpowiadający (prawdziwy kod jest trochę za długa i nie sądzę, że to istotne, jeśli tak uważasz, mogę umieścić go tak czy inaczej:

namespace my\Bundle\Controller; 
class IndividuController extends Controller 
{ 
    public function step2Action() { 
    Some code 
    } 
    public function step3Action($myParam) { 
    Some code 
    } 
} 

routing.yml config plik w stosunku do wiązki:

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 file/routing.yml:

fos_js_routing: 
    resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml" 

myBundle: 
    resource: "@myBundle/Resources/config/routing.yml" 
    prefix: /

Th Odpowiednie informacje layout e za:

<!-- 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> 

Wynik php routera app/konsoli: debug (zostawiłem tylko odpowiednie informacje + opuściłem niezdefiniowanej zmiennej zawiadomienie na wszelki wypadek, to zawiadomienie Dostałem od dodałem tej biblioteki, nadal prace biblioteczne i nie sądzę, problem może pochodzić stąd:

C:\wamp\www\suapsRepo\suaps>php app/console router:debug 

Notice: Undefined variable: kPathUrl in C:\wamp\www\suapsRepo\suaps\vendor\html2 
pdf\_class\tcpdfConfig.php on line 80 

Call Stack: 
    0.0070  231536 1. {main}() C:\wamp\www\suapsRepo\suaps\app\console:0 
    0.0209  685656 2. require_once('C:\wamp\www\suapsRepo\suaps\app\bootstr 
ap.php.cache') C:\wamp\www\suapsRepo\suaps\app\console:10 
    0.0212  701752 3. require_once('C:\wamp\www\suapsRepo\suaps\app\autoloa 
d.php') C:\wamp\www\suapsRepo\suaps\app\bootstrap.php.cache:3 
    0.1335 2998152 4. require_once('C:\wamp\www\suapsRepo\suaps\vendor\html 
2pdf\html2pdf.class.php') C:\wamp\www\suapsRepo\suaps\app\autoload.php:51 
    0.1379 3361792 5. require_once('C:\wamp\www\suapsRepo\suaps\vendor\html 
2pdf\_class\myPdf.class.php') C:\wamp\www\suapsRepo\suaps\vendor\html2pdf\html2p 
df.class.php:19 
    0.1385 3393792 6. require_once('C:\wamp\www\suapsRepo\suaps\vendor\html 
2pdf\_class\tcpdfConfig.php') C:\wamp\www\suapsRepo\suaps\vendor\html2pdf\_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} 

Wynik php fos app/konsoli: jS-routing: debug (usunąłem Wskazówka PHP, ale to się dzieje na każdym poleceniu robię btw):

C:\wamp\www\suapsRepo\suaps>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} 

Edycja: Również nie wiem, czy to istotne, ale gdy próbuję 'php fos app/console: JS-routing: debugowania myBundle_step2' pojawia się następujący błąd PHP:

[Error Wyjątek] Warning: Missing argument 3 dla Symfony \ Bundle \ FrameworkBundle \ Command \ RouterDebugCommand: outputRoute(), wywołany w C: \ katalog_funkcji \ vendor \ bundles \ FOS \ JsRoutingBundle \ Command \ RouterDebugExposedCommand.php na linii 62 i zdefiniowany w C: \ serverDirectory \ vendor \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Command \ RouterDebugCommand.php line 98

+1

Czy możesz pokazać nam kontrolera tych dwóch działań za pomocą konfiguracji opisów/xml trasy? – stedekay

+0

Edytowałem i dodawałem cały routing.yml + kod kontrolera. – MisterJ

+0

Czy dodałeś js do swojego układu? Zobacz [tutaj] (https://github.com/FriendsOfSymfony/FOSJsRoutingBundle/blob/master/Resources/doc/README.markdown#usage) – Erioch

Odpowiedz

44

Też miałem ten problem. Ustawienie parametru options.expose w konfiguracji routingu rozwiązało to dla mnie.

routing.yml

cart_edit: 
    pattern: /Cart/edit 
    defaults: { _controller: CartCartBundle:Default:cart_edit } 
    options: 
     expose: true 

my.js

var url = Routing.generate('cart_edit'); 
$.post(url, function(data) { 
     //do somthing 
}); 

Zmiany w miarę potrzeb. Mam nadzieję, że rozwiąże to twój problem.

+1

Pracował dla mnie, to powinna być akceptowana odpowiedź. Jest napisany w dokumentach jsRouting, ale nie jest wystarczająco dobrze podświetlony dla takich jak ja diablistych programistów. –

+0

Nie można go sprawdzić, ponieważ nie mam już projektu (poprzednia firma), ale biorąc pod uwagę wysoki wskaźnik poboru, myślę, że to rozwiązanie działa tak dobrze. – MisterJ

+0

Dzięki, pracował dla mnie. –

5

Miałem ten sam problem, a problem był w moim pliku konfiguracyjnym.Sprawdź to:

# app/config/config.yml 
fos_js_routing: 
    routes_to_expose: [ myBundle_step2, myBundle_step3, ... ] 
0

Tylko dla kompletności: możliwe jest również użycie adnotacji (options={"expose"=true}) Jak wyjaśniono w documentation:

// src/AppBundle/Controller/DefaultController.php 

/** 
* @Route("/foo/{id}/bar", options={"expose"=true}, name="my_route_to_expose") 
*/ 
public function indexAction($foo) { 
    // ... 
} 

ta działa również na trasach ustawia na poziomie kontrolera (przykład z jednej z moich kontrolerami):

/** 
* 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 
{ 
Powiązane problemy