質問: お世話になります。 Symfony2を勉強中です。全コントローラー(同じバンドル内)に共通で読み込ませるクラスはどんな手順で組み込むのでしょうか。 ``` use bar\fooBundle\hogehoge; ``` こんなようにuseを使ってすべてのコントローラーの頭で読み込ませるのは何かしら合理的ではないような気がしております。 パスワードの暗号化や時間の比較、オブジェクトのキャストなどなど、汎用的に使う関数があるかと思うのですが、皆様はどのような形で実装しているのでしょうか。 よろしくお願いします。
回答: 普通にOOPのアプローチが使えますので、例えばコントローラであればプロジェクト用のベースクラスを作り、そこにユーティリティメソッドを実装する方法があります。Standard Editionの標準のコントローラの場合はFrameworkBundleのControllerクラスを継承していますから、この継承階層の間に1つ、プロジェクト用のコントローラを挟む形になります。 ``` // src/AppBundle/Controller/BaseController.php use Symfony\Bundle\FrameworkBundle\Controller\Controller; /** * プロジェクト用ベースコントローラ */ class BaseController extends Controller { /** * ユーティリティメソッド */ public function someUtilityMethod($foo) { ... // src/AppBundle/Controller/FooController.php /** * 個々のコントローラ */ class FooController extends BaseController { public function indexAction($bar) { // ベースクラスのユーティリティメソッド呼び出し $this->someUtilityMethod($bar); ``` 注意点としまして、このアプローチだと手軽さのために、あらゆるものをBaseControllerに実装しがちになり、そこがウィークポイントになってしまいます。機能はできるだけ別のクラスにサービスとして実装し、利用するコントローラ側で明示的に取得するようにしておく方が、後々の管理等しやすいです。