symfony2 バンドルの登録

2011.11.06 22:00
 実際問題として、バンドルの登録は必要ありません。こんなことをいうのはちょっとおかしいのですが、登録は殆ど自動的に行なってくれるからです。しかし全体を把握するには、この登録を知っておいた方がいいのです。
 この登録には二種類の登録があります。ひとつは名前空間の登録であり、もうひとつはカーネルへの登録です。名前空間のことは前章でも少し触れました。これは、バンドルが1つの塊として独立して機能するようにするためのプログラムの単位です。この単位が機能するためにはプログラム全体の一部として呼び出す必要があるのです。しかしsrc以下に自動的に生成されたバンドルのファイル群はすでに./app/autoload.phpによって自動的に呼び出されることが約束されています。またカーネルには自動的に登録されます。しかし自動的に登録されるのは、app/consoleのバンドル生成のコマンドを使用した時のみです。ですから、以下のようなことが可能であるということです。
 これらのバンドルは、その他のSymfony2のフレームワークに移植が可能であるということも示唆しています。よそからバンドルをコピペしてきてしかるべき場所に登録すれば使い回しが可能であるということです。
 後々、アプリケーションの構築が煩雑になってきた場合には、これらの基本的な機能を知る必要があるので、一応手動で登録することと、その登録を確認してみることにします。

名前空間の登録

 名前空間の登録は./app/autoload.phpの$loader->registerNamespacesプロパーティーに作成したバンドルの名前空間を登録します。すでに登録されているバンドルが幾つか見られる筈です。見ての通り配列に追加してゆくかたちとなっています。
 今回は前章で作成したバンドルTEST/HelloBundleの名前空間TESTを登録します。
'TEST'         => __DIR__.'/../src',

$loader->registerNamespaces(array(
    'Symfony'          => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
    'Sensio'           => __DIR__.'/../vendor/bundles',
    'JMS'              => __DIR__.'/../vendor/bundles',
    'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib',
    'Doctrine\\DBAL'   => __DIR__.'/../vendor/doctrine-dbal/lib',
    'Doctrine'         => __DIR__.'/../vendor/doctrine/lib',
    'Monolog'          => __DIR__.'/../vendor/monolog/src',
    'Assetic'          => __DIR__.'/../vendor/assetic/src',
    'Metadata'         => __DIR__.'/../vendor/metadata/src',
   
    #追加登録したバンドル  
    'Acme'         => __DIR__.'/../src',
    'TEST'         => __DIR__.'/../src',        # この名前空間を追加する
));

カーネルへの登録

 カーネルは勿論Linuxのカーネルではありません。このSymfony2フレームワーク内のカーネルです。コアになる部分をカーネルとよんでいるわけです。この部分app/AppKernel.phpにバンドルを登録します。実際はapp/console generate:bundleコマンドで自動的に書き加えられます。

app/AppKernel.php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
            new Acme\HelloBundle\AcmeHelloBundle(),
            new TEST\HelloBundle\TESTHelloBundle(),    # 加えられたバンドル
        );
        ...

登録されたバンドルは、
new <名前空間>\<バンドル名>Bundle\<名前空間><バンドル名>Bundle()
という形式で登録されます。自動的に書き加えられるので特に気にする必要はないのですが、後で削除する際には不便なので一応確認しておくことをおすすめします。私は一応コメントをつけておきます。
 ここまでの作業でバンドルに新しいアプリケーションを作成できるようになります。どうですか?とっても簡単でしょう?

バンドルを削除する

 作成に失敗してしまったバンドルや削除したいバンドルが出てきた場合は、上記の登録を抹消する必要があります。
 すでに使われなくなったバンドルを削除する際には、
  1. 実装したバンドルのファイル群の削除と共に
  2. 名前空間の削除とカーネール登録の削除
をすればきれいさっぱり削除することができます。







プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer