SymfonyでBackboneJSやAngularJSを利用したアプリケーションを使うときってどうやって作ってますか?僕の場合はサクッと作りたい場合はFOSJsRoutingBundleとFOSRestBundleを利用しています。今日はそんなFOSJsRoutingBundleについてさっくりと書いていきたいと思います。そもそもFOSJsRoutingBundleとは?FOSJsRoutingBundleSPA(シングルページアプリケーション)な環境でSymfony2を利用してる場合に、Js側でもルーティング周りを統一できるBundleです。Tiwgでpath()関数と同じ機能をJavaScript側にも提供してくれる非常に便利なBundleです。FOSJsRoutingBundleを使わない場合どうなるのか?まずは、FOSJsRoutingBundleを使わない例を考えてみましょう。ここに2つほど使わないサンプルを書いてみました。そもそもSymfony側のルーティングを気にしないSymfony側のルーティング名を使わなくてもリクエストを送ることはできますよね。URLを直接書いてしまっても大きくは問題がありません。}});</script>しかし、この方法だと実装を進めていくなでいろいろ不便になってきます。パラメータの扱い方が変わってURLが変更になったりしたらもう・・・。Twigのpath関数を利用するTwigファイルの中にJsが書かれていた時に限定されてしまいますが、以下のように書くことができます。}});</script>直接URLを記載するやり方よりはマシなんですが・・・。簡単なアプリケーションだったら一つのファイルの中にすべてのコードを実装することもできますが、さすがにちょっと大きい規模になってきたらJsのファイルを分割して書きたくなると思います。ファイルを分けてしまうとpath関数が使えなくなるし、、、ちょっと辛いですね。́・ω・`)もちろん今は全てFOSJsRoutingBundleをつかようにしていますけどねwFOSJsRoutingBundleをつかってみよう結局ファイルを分割しなきゃいけないような状況だとFOSJsRoutingBundleは非常に便利です。JS側でSymfonyのルーティング名を取得できるます。上のサンプルのようなmyspamain_default_collectionってルーティング名をjs側で取得する場合は以下のようにします。/collectionパラメータが必要な場合は普通にオブジェクトを渡してあげれば大丈夫です。1});簡単に導入方法を説明します。ライブラリを用意します。assets:installこれで準備は完了です。実際の使い方は以下のような感じになりますよ。}});</script>JavaScript側でRouting.generate('myspamain_default_collection');やって実装できるのは便利ですね。フロントエンド触る側からしたら、バックエンド側でどのような処理が行われているかも気にしなくていいし、このレベルならSymfony触れないフロントエンドの人にも使ってもらえるような気がします。Backbone.routerとの連携のお話まあ以前にも書いているんですが、Symfony2とBackbone.routerを併用していた場合にapp_dev.phpからアクセスした場合にうまく動作しません。いうとpushStateする場合にちゃんと動作しないです。jsに無理やりprod環境だとかdev環境だとかの環境変数を渡すこともできるんですが、それもやっぱ避けたい。そんなときはBackbone.history.startでrootのパスの値を指定できるので以下のように書けば大丈夫です。"/"});最後の最後にちょっと話が逸れてしまいますが、SPAっぽい感じの開発していた時に便利だったChromeのプラグインも紹介しておきます。shortcut2.6になったらいらないんですが、2.6以下のバージョン使用している人はぜひ使ってみてください。Ajaxで通信している内容のプロファイラの画面へ飛べるので非常に便利です。最後にSymfonyとJavaScriptでそこそこ大きい規模の開発をする場合はRouting.generateがほんと便利なので、ぜひ使ってみてください。