2013-04-16 6 views
16

मैं FOSJSRoutingBundle के साथ एक सच में अजीब समस्या का सामना कर रहा हूँ:FOSJSRoutingBundle: "मार्ग xxx मौजूद नहीं है"

सबसे पहले, यहाँ मेरी विन्यास है: मैं Symfony 2.0.23 पर और JQuery के साथ काम कर रहा हूँ, पर एक WAMP के साथ विंडोज 7 64 बिट्स (अपाचे 2.4.2 और PHP 5.4.3)। मैंने FOSJSRoutingBundle के जिथब से सभी सेटिंग्स की हैं और मेरे मार्गों का खुलासा किया है (लगभग सभी संबंधित समस्याएं जिन्हें मैं गुगलिंग द्वारा प्राप्त कर सकता हूं (FOSJSRoutingBundle's github पर, यहां और विभिन्न मंचों पर) क्योंकि लोग अपने मार्गों का खुलासा नहीं करते हैं, लेकिन मैं php ऐप/कंसोल फॉस की कोशिश की: जेएस-रूटिंग: डीबग और मैं अपने मार्ग देखता हूं)। जेएस लेआउट में जोड़ा जाता है (अंत में लेआउट का कोड)।

js में मार्गों के लिए यूआरएल उत्पन्न करने के लिए कोशिश कर रहा है, शुरुआत में मैं दो अलग-अलग मार्गों उत्पन्न करने के लिए चाहता था, लेकिन परीक्षण के लिए मैं नीचे js कोड बनाया:

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

इस कोड के साथ, मैं जावास्क्रिप्ट त्रुटि मिलती है " मार्ग MyBundle_step2 मौजूद नहीं है "। हालांकि पहला भाग अभी भी काम करता है (अलर्ट मुझे लिंक बनाया गया है और पुनर्निर्देशन अच्छी तरह से चला जाता है)। यदि मैं दूसरा फ़ंक्शन हटा देता हूं, तो मुझे अब जावास्क्रिप्ट त्रुटि नहीं मिलती है। यदि दूसरे फ़ंक्शन में मैं चरण 3 द्वारा चरण 2 को प्रतिस्थापित करता हूं, तो त्रुटि "रूट MyBundle_step3 मौजूद नहीं है"। मैंने कैश को साफ़ करने और PHP एप/कंसोल संपत्ति चलाने के लिए प्रयास किया: इंस्टॉल करें - फिर से लिंक करें, लेकिन कोई परिणाम नहीं।

यहाँ नियंत्रक इसी कोड है (वास्तविक कोड थोड़ा लंबा है और मुझे नहीं लगता कि यह प्रासंगिक है, यदि आप ऐसा लगता है, मैं इसे वैसे भी डाल सकता है: routing.yml config

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

बंडल करने के लिए फ़ाइल रिश्तेदार:

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 

एप्लिकेशन/config/routing.yml फ़ाइल:

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

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

गु ई लेआउट के प्रासंगिक जानकारियां:

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

php एप्लिकेशन/कंसोल रूटर के परिणाम: डिबग (मैं केवल प्रासंगिक जानकारियां + मैं सिर्फ मामले में अपरिभाषित चर नोटिस छोड़ दिया छोड़ दिया है, यह एक नोटिस मुझे मिल गया के बाद से मैं इस पुस्तकालय जोड़ा है, अभी भी पुस्तकालय काम करता है और मुझे नहीं लगता कि यहां समस्या से आ सकता है है: जे एस-मार्ग:

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} 

php एप्लिकेशन/कंसोल FOS के परिणाम डिबग (मैं हटा दिया पीएचपी सूचना लेकिन यह हर आदेश मैं बनाने पर होता है बीटीडब्ल्यू):

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} 

संपादित करें: इसके अलावा, अगर यह प्रासंगिक है, लेकिन पता नहीं है जब मैं कोशिश 'php एप्लिकेशन/कंसोल FOS: js-मार्ग: डिबग myBundle_step2' मैं निम्नलिखित php त्रुटि मिलती है:

[त्रुटि अपवाद] चेतावनी: लापता Symfony \ Bundle \ FrameworkBundle \ Command \ RouterDebugCommand के लिए तर्क 3: आउटपुट रूट(), जिसे सी: \ symfonyDirectory \ विक्रेता \ bundles \ FOS \ JsRoutingBundle \ Command \ RouterDebugExposedCommand.php पंक्ति 62 पर परिभाषित किया गया है और सी: \ serverDirectory \ विक्रेता \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Command \ RouterDebugCommand.php लाइन 98

+1

क्या आप हमें अपने दो राउटिंग के एनोटेशन/एक्सएमएल कॉन्फ़िगरेशन के साथ इन दो कार्रवाइयों का नियंत्रक दिखा सकते हैं? – stedekay

+0

मैंने संपादित किया और सभी routing.yml + नियंत्रक कोड जोड़ा। – MisterJ

+0

क्या आपने अपने लेआउट में जेएस जोड़ा है? [यहां] देखें (https://github.com/FriendsOfSymfony/FOSJsRoutingBundle/blob/master/Resources/doc/README.markdown#usage) – Erioch

उत्तर

44

मैं भी इस समस्या थी। रूटिंग कॉन्फ़िगरेशन पर options.expose पैरामीटर सेट करने से यह मेरे लिए हल हो गया।

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

बदलें के रूप में की जरूरत है। उम्मीद है कि यह आपकी समस्या का समाधान करेगा।

+1

मेरे लिए काम किया, यह जवाब स्वीकार किया जाना चाहिए। यह jsRouting दस्तावेज़ों में लिखा गया है, लेकिन मेरे जैसे तूफान देवताओं के लिए पर्याप्त हाइलाइट नहीं किया गया है। –

+0

यह जांच नहीं सका क्योंकि मेरे पास अब परियोजना नहीं है (पिछली कंपनी) लेकिन अपवॉट की उच्च दर को देखते हुए मुझे लगता है कि समाधान काम कर रहा है। – MisterJ

+0

धन्यवाद, मेरे लिए काम किया। –

5

मुझे एक ही समस्या थी और समस्या मेरी कॉन्फ़िगरेशन फ़ाइल में थी।इस के लिए देखने का प्रयास करें:

# app/config/config.yml 
fos_js_routing: 
    routes_to_expose: [ myBundle_step2, myBundle_step3, ... ] 
0
बस संपूर्णता के लिए

:

// src/AppBundle/Controller/DefaultController.php 

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

यह भी मार्गों के लिए काम करता है नियंत्रक के स्तर पर (मेरी नियंत्रकों में से एक से उदाहरण) सेट: यह भी एनोटेशन (options={"expose"=true}) documentation में बताई गई विधि का उपयोग करना संभव है

/** 
* 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 
{ 
संबंधित मुद्दे