FOSJSRoutingBundleで本当に奇妙な問題に直面しています:
まず最初に、これが私の設定です:私はSymfony 2.0.23とJQueryを使用しており、Windows 7 64ビットとWAMPを使用しています(Apache 2.4.2およびPHP 5.4.3) 。私はFOSJSRoutingBundleのgithubからすべての設定を行い、私のルートを公開しました(グーグル(FOSJSRoutingBundleのgithub、ここおよび別のフォーラムで)で見つけることができるほとんどすべての関連する問題は、人々がルートを公開していないためでしたが、私はphp app/console fos:js-routing:debugを試してみましたが、ルートが表示されます。jsがレイアウトに追加されます(最後のレイアウトのコード)。
JsでルートのURLを生成しようとしましたが、最初は2つの異なるルートを生成したかったのですが、テストのために以下の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が存在しません」が表示されます。ただし、最初の部分は引き続き機能します(アラートにより、作成されたリンクが提供され、リダイレクトがうまくいきます)。 2番目の関数を削除すると、Javascriptエラーが発生しなくなります。
2番目の関数でstep2をstep3に置き換えると、エラーは「ルートmyBundle_step3が存在しません」になります。キャッシュをクリアしてphp app/console asset:install --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
通知:未定義の変数:C:\ wamp\www\suapsRepo\suaps\vendor\html2 pdf_class\tcpdfConfig.phpの80行目のkPathUrl
コールスタック: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通知を削除しましたが、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}
編集:また、それが関連しているかどうかはわかりませんが、「php app/console fos:js-routing:debug myBundle_step2」を実行すると、次のphpエラーが発生します。
[エラー例外]警告:C:\ symfonyDirectory\vendor\bundles\FOS\JsRoutingBundle\Command\RouterDebugExposedCommand.phpで呼び出され、62行目で定義されているSymfony\Bundle\FrameworkBundle\Command\RouterDebugCommand:outputRoute()の引数3がありません。 C:\ serverDirectory\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Command\RouterDebugCommand.php行98
私もこの問題を抱えていました。ルーティング構成で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
});
必要に応じて変更してください。これで問題が解決することを願っています。
私は同じ問題を抱えていて、問題は私の設定ファイルにありました。これをチェックしてみてください:
# app/config/config.yml
fos_js_routing:
routes_to_expose: [ myBundle_step2, myBundle_step3, ... ]
完全を期すために、注釈(options={"expose"=true}
) ドキュメント で説明されているように:
// src/AppBundle/Controller/DefaultController.php
/**
* @Route("/foo/{id}/bar", options={"expose"=true}, name="my_route_to_expose")
*/
public function indexAction($foo) {
// ...
}
これは、コントローラーレベルのルートセット(たとえば、私のコントローラーの1つ)でも機能します。
/**
* 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
{