У меня действительно странная проблема с FOSJSRoutingBundle:
Прежде всего, вот моя конфигурация: я работаю на Symfony 2.0.23 и с JQuery, на Windows 7 64 бит с WAMP (Apache 2.4.2 и PHP 5.4.3). Я выполнил все настройки из github FOSJSRoutingBundle и раскрыл мои маршруты (почти все связанные с этим проблемы, которые я мог найти с помощью googling (на github FOSJSRoutingBundle, здесь и на разных форумах), были из-за того, что люди не выставляли свои маршруты, но я попытался php app/console fos: js-routing: debug и я вижу свои маршруты). JS добавляется в макет (код макета в конце).
Пытаясь сгенерировать URL для маршрутов в 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);
С помощью этого кода я получаю ошибку javaScript "Маршрут myBundle_step2 не существует". Хотя первая часть все еще работает (оповещение дает мне созданную ссылку, и перенаправление идет хорошо). Если я удаляю вторую функцию, я больше не получаю ошибку Javascript.
Если во второй функции я заменяю step2 на step3, возникает ошибка "Маршрут myBundle_step3 не существует". Я попытался очистить кэш и запустить приложение php app/console: снова установить --symlink, но безрезультатно.
Вот соответствующий код контроллера (реальный код немного длинный, и я не думаю, что он уместен, если вы так думаете, я мог бы поставить его в любом случае:
namespace my\Bundle\Controller;
class IndividuController extends Controller
{
public function step2Action() {
Some code
}
public function step3Action($myParam) {
Some code
}
}
Файл конфигурации routing.yml относительно комплекта:
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.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 app/console router: debug (я оставил только релевантную информацию + я оставил уведомление о неопределенной переменной на всякий случай, это уведомление я получил, так как добавил эту библиотеку, библиотека все еще работает, и я не думаю, что проблема может возникнуть отсюда:
C:\wamp\www\suapsRepo\suaps>php app/console router:debug
Примечание: неопределенная переменная: kPathUrl в C:\wamp\www\suapsRepo\suaps\vendor\html2 pdf_class\tcpdfConfig.php в строке 80
Стек вызовов: 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
[маршрутизатор] Текущие маршруты
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 app/console fos: js-routing: debug (я удалил уведомление PHP, но это происходит при каждой команде, которую я выполняю, кстати):
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 app/console fos: js-routing: debug myBundle_step2', я получаю следующую ошибку php:
[Исключение ошибки] Предупреждение: отсутствует аргумент 3 для Symfony\Bundle\FrameworkBundle\Command\RouterDebugCommand: outputRoute(), вызываемый в C:\symfonyDirectory\vendor\bundles\FOS\JsRoutingBundle\Command\RouterDebugExposedCommand.php в строке 62 и определенный в C:\serverD\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Command\RouterDebugCommand.php строка 98