引き続きWebMatrix+Symfony2シリーズ。
SymfonyはBundleという「プラグインのすごい版」を組み合わせて作っていくようになっているとのこと。だいたい投稿管理、ユーザー管理、みたいに機能の単位で切っていくような想定みたいです。
コンソールからスケルトンを作ります。
C:\Users\iseebi\Documents\My Web Sites\WebSite1\Symfony\app>console init:bundle "Iseteki\SampleBundle" src Summary of actions - The bundle "IsetekiSampleBundle" was created at "src/Iseteki/SampleBundle" and is using the namespace "Iseteki\SampleBundle". - The bundle contains a sample controller, a sample template and a sample routing file. Follow-up actions - Enable the bundle inside the AppKernel::registerBundles() method. Resource: http://symfony.com/doc/2.0/book/page_creation.html#create-the-bundle - Ensure that the namespace is registered with the autoloader. Resource: http://symfony.com/doc/2.0/book/page_creation.html#autoloading-introduction-sidebar - If using routing, import the bundle's routing resource. Resource: http://symfony.com/doc/2.0/book/routing.html#including-external-routing-resources - Starting building your bundle! Resource: http://symfony.com/doc/2.0/book/page_creation.html#the-hello-symfony-page
app/AppKernel.php の registerBundles に追加する
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\ZendBundle\ZendBundle(),
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\DemoBundle\AcmeDemoBundle(),
new Iseteki\SampleBundle\IsetekiSampleBundle(), // add
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Symfony\Bundle\WebConfiguratorBundle\SymfonyWebConfiguratorBundle();
}
return $bundles;
}
$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', 'Zend\\Log' => __DIR__.'/../vendor/zend-log', 'Assetic' => __DIR__.'/../vendor/assetic/src', 'Acme' => __DIR__.'/../src', 'Iseteki' => __DIR__.'/../src', ));
app/config/routing.yml に追加する
_sample: resource: "@IsetekiSample/Resources/config/routing.yml"
src/Iseteki/SampleBundle/Resources/config/routing.yml のコメントアウトを解除
homepage: pattern: /sample/ defaults: { _controller: IsetekiSampleBundle:Default:index }
これで http://localhost:8080/Symfony/web/app_dev.php/sample/ を開くと何かしら表示されるはずなんですが、エラーになってしまいました。
どうやら、バンドルサフィックスがPR9だけ違うらしいです。
@iseebi @brtriver PR9は、バンドルの名前ルールが少し変更になっている(しかし次のリリースでそれは巻き戻る予定)のがややこしいデス・・・
2011-04-04 23:47:32 via YoruFukurou to @iseebi
@iseebi PR9だと、たとえばrouting.ymlには「defaults: { _controller: IsetekiSample:Default:index }」のようにBundleを省略して書かないとダメなんです。PR9だけのルールになると思われますが・・・。
2011-04-04 23:57:44 via YoruFukurou to @iseebi
というわけで、src/Iseteki/SampleBundle/Resources/config/routing.yml を修正。
homepage: pattern: /sample/ # defaults: { _controller: IsetekiSampleBundle:Default:index } defaults: { _controller: IsetekiSample:Default:index }
さらに今度はテンプレートが参照できなくなるので、src/Iseteki/SampleBundle/Controller/DefaultController.php を修正。
public function indexAction() { //return $this->render('IsetekiSampleBundle:Default:index.html.twig'); return $this->render('IsetekiSample:Default:index.html.twig'); }
再度開くと
Hello!
とだけ表示されたページが出てきました。
PR9だけのルールで、今後のリリースで元に戻るそうですので、あえてPR8に戻すという選択肢もあります。が、ひとまずはこのままいってみようとおもいます。
Twitterでアドバイスいただいた @hidenorigoto さん、@brtriver さん、ありがとうございました!