読者です 読者をやめる 読者になる 読者になる

Symfony2.0初感

Symfony

最初の印象。

  • symfony1.*系と全く別フレームワーク
  • symfony ccはどこ?
  • *Foundationとか*Bundle, Resourceといった命名規約、ディレクトリ構成がCocoaっぽい
  • PHP5.3のnamespaceは案外気にならない(ドヤ顔
  • 調査、学習する価値あり

インストール

とりあえず試してみるにはQuick TourにあるようにSandboxアプリケーションを使うのが早い。

sandbox/webがDocumentRootになるようにApacheを設定して、

にアクセスする。

Twigを使う

素のPHPをテンプレートエンジンに使うなどありえないのでTwigを使う。どのBundleを使うとかの設定は*Kernel.phpで設定するっぽいので、以下のように変更してTwigBundleを使う。

diff --git a/hello/HelloKernel.php b/hello/HelloKernel.php
index ba23ea8..ed9584d 100644
--- a/hello/HelloKernel.php
+++ b/hello/HelloKernel.php
@@ -25,7 +25,7 @@ class HelloKernel extends Kernel
             //new Symfony\Bundle\DoctrineMigrationsBundle\DoctrineMigrationsBundle(),
             //new Symfony\Bundle\DoctrineMongoDBBundle\DoctrineMongoDBBundle(),
             //new Symfony\Bundle\PropelBundle\PropelBundle(),
-            //new Symfony\Bundle\TwigBundle\TwigBundle(),
+            new Symfony\Bundle\TwigBundle\TwigBundle(),

             // register your bundles
             new Application\HelloBundle\HelloBundle(),

hello/config.yml, hello/config_dev.ymlも追加する必要があるみたいなので変更。

# config/config.yml
twig.config: ~

# config/config_dev.yml
twig.config:
    auto_reload: true

あとは、Controller側でrenderの仕方を変更すればよい。不要なコードを削って、sandbox/src/Application/HelloBundle/Controller/HelloController.phpを次のようにした。

<?php

namespace Application\HelloBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HelloController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('HelloBundle:Hello:index:twig', array('name' => $name));
    }
}

テンプレートは、sandbox/src/Application/HelloBundle/Resources/viewsの下に置かれるらしいが、Twigテンプレート(拡張子.twig)以外はいらなくなったので削除してしまう。

設定ファイル

hello/configに見慣れた名前のファイルがたくさんあるが、yml, xml, phpがあって紛らわしい。hello/config/_READMEによると、

The Symfony2 configuration can be done in PHP, YAML, or PHP.

The configuration format used is defined in the HelloKernel.php file -- look
at the bottom of the file (YAML is the default). After you chose the format
that fits you better, you can cleanup this directory by safely removing the
configuration files for the other formats.

ということなので、HelloKernel.phpを変更してYAML以外は使わないことにしてしまう。

diff --git a/hello/HelloKernel.php b/hello/HelloKernel.php
index ed9584d..fedb718 100644
--- a/hello/HelloKernel.php
+++ b/hello/HelloKernel.php
@@ -52,11 +52,5 @@ class HelloKernel extends Kernel
         // use YAML for configuration
         // comment to use another configuration format
         $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
-
-        // uncomment to use XML for configuration
-        //$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.xml');
-
-        // uncomment to use PHP for configuration
-        //$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.php');
     }
 }