Symfony Best Practice - 実践編 Chapter6,8-

前回

hanahirodev.hatenablog.com

いじった結果は随時GitHubにあげていきます。


Chapter6はテンプレートについてです。 Symfony2で作ったTwigのフィルターをSymfony3で使う形にしてみようと思います。

最終的な形は以下です。

github.com

Twigエクステンションを作る

ベストプラクティスに従って作ってみます。 まずは、エクステンションのクラスを作ります。

  • コンストラクタでメイン言語のtranslatorと併記する言語(sub locale)をインジェクトします。
  • getFilters()/getName() は自前のエクステンションの情報を返せるようにオーバーライドします。
  • multiTrans()でメインの処理を書きます。

https://github.com/hanahiroAze/symfony3_demo/pull/1/files#diff-32cc6ad49a0083779d7ee61592a42aa3

localeをいじるためのEventListenerを書きます。本家のまんまコピーです。

https://github.com/hanahiroAze/symfony3_demo/pull/1/files#diff-4968cc448d20825bee969ece9686fffa

次にサービスに登録します。この時EventListenerも登録してます。

https://github.com/hanahiroAze/symfony3_demo/pull/1/files#diff-1728bfc1c274f341afc1a0275fca694d

ここまでで自作エクステンションの追加が出来ました。

画面から使うために翻訳ファイルに手を入れます。 今回はわかりやすいようにヘッダーの「Symfony Demo」を併記してみます。

翻訳ファイルに「Symfony Demo」の対訳を追加します。

https://github.com/hanahiroAze/symfony3_demo/pull/1/files#diff-1848a926db6eb9fbe0e97b401f58d947

最後にTwigにフィルターを適用します。

https://github.com/hanahiroAze/symfony3_demo/pull/1/files#diff-a2f33b79364623e3cb2737239c5eee62

実行結果

f:id:hiroyuki-hanai:20161127163547p:plain

無事併記されました!