7240


お世話になります。  
Symfony2を勉強中です。全コントローラー（同じバンドル内）に共通で読み込ませるクラスはどんな手順で組み込むのでしょうか。

[code]

        use bar\fooBundle\hogehoge;
    
[/code]

こんなようにuseを使ってすべてのコントローラーの頭で読み込ませるのは何かしら合理的ではないような気がしております。  
パスワードの暗号化や時間の比較、オブジェクトのキャストなどなど、汎用的に使う関数があるかと思うのですが、皆様はどのような形で実装しているのでしょうか。  
よろしくお願いします。


CC BY-SA 3.0
2015-02-26T17:51:36.190
7163
2015-02-28T00:29:27.190
2015-02-26T21:23:31.057
7926
7154
question
php symfony2
Symfony2で汎用的なクラスを作成する


普通にOOPのアプローチが使えますので、例えばコントローラであればプロジェクト用のベースクラスを作り、そこにユーティリティメソッドを実装する方法があります。Standard
Editionの標準のコントローラの場合はFrameworkBundleのControllerクラスを継承していますから、この継承階層の間に1つ、プロジェクト用のコントローラを挟む形になります。

[code]

    // 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);
    
[/code]

注意点としまして、このアプローチだと手軽さのために、あらゆるものをBaseControllerに実装しがちになり、そこがウィークポイントになってしまいます。機能はできるだけ別のクラスにサービスとして実装し、利用するコントローラ側で明示的に取得するようにしておく方が、後々の管理等しやすいです。


CC BY-SA 3.0
2015-02-28T00:29:27.190
7240
2015-02-28T00:29:27.190
5444
7163
answer