Symfony2の簡単チュートリアル(環境整備込み)



まだまだ現役のSymfony1.4.6ですがそろそろサポートも終わり、Symfony2が一般的になる日も近いような気がしてきているこのごろです。Symfony2はSymfony1.4.6と互換性がないといっていいでしょう。1.4.6で利用しているデータベースをSymfony2でモデルと生成して利用するというのが今後の流れになるでしょう。早めにSymfony2に触れておきましょう。

http://symfony.com/

色々とチュートリアルがあるけれども意外と動かなかったり。とりあえずここで書いてあるものは私の環境ではしっかりと動作させたもののみ掲載しています。Debian6.0.3 さくらVPSの上でVPN経由で動かしました。

Symfony2の環境整備

symfony2はPHP5.3.xで動作します。Debian6 SqueezeではPHP5.3が入ります。
Debian5 Lenny等の場合は
http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html
などを参考になりますが、Squeezeでのmysqlのバージョンアップで多くが何故かトラブります。
Squeezeではnginxのバージョンも上がりますのでSqueezeへのバージョンアップをお勧めします。
http://d.hatena.ne.jp/Kmusiclife/20120118/1326871846


nginxでsymfony2を動作させます。今のところ下記の設定で動作しています。
app.phpやapp_dev.phpのコントロールもこの辺でできます。

location / {
    root /path/symfony2/web;
    index index.html index.htm index.php;
}
location ~ \.php|\.html$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /path/symfony2/web$fastcgi_script_name;
}
location ~ \.cgi$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:8999;
    fastcgi_index index.cgi;
    fastcgi_param SCRIPT_FILENAME /path/symfony2/web$fastcgi_script_name;
}

なお、nginxなどの細かい設定は
http://d.hatena.ne.jp/Kmusiclife/searchdiary?word=%2A%5Bnginx%5D
を参考にしてください。

その他、gitなど必要となるソフトも幾つかありますのでその都度確認してください。

Symfony2の簡単チュートリアル

$ wget http://symfony.com/download?v=Symfony_Standard_Vendors_2.0.9.tgz -O Symfony_Standard_Vendors_2.0.9.tgz
$ tar zxvf Symfony_Standard_Vendors_2.0.9.tgz
$ mv Symfony symfony2
$ cd symfony2

download完了です

$ php app/check.php # 問題がなければ次へ
$ php bin/vendors install # vendorの場合は --reinstall を追加

localhost以外からアクセスする場合は

$ vim web/app_dev.php
/* コメントアウトします
if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
    '127.0.0.1',
    '::1',
))) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
*/

ブラウザよりアクセスします。
http://hostname/app_dev.php
にアクセスします。

Whoops, looks like something went wrong.

などのエラーが出た場合はcacheのパーミッションに問題があることが多いです。

$ chmod -R 777 app/cache app/logs

でcacheのパーミッションを与えます。
welcomeのページが表示されればOKです。

http://hostname/app_dev.php/_configurator

よりデータベースなどの基本設定を行います。
おそらく書き込みエラーが出るので

$ chmod -R 777 app/config/parameters.ini

再度更新してリクエストを送り直せば更新されます。

Doctrine(model)を作成します。

$ php app/console doctrine:generate:entity --entity=AcmeDemoBundle:Product --fields="name:string(255) price:float description:text" --format=yml

を行うことによって

src/Acme/DemoBundle/Entity/Product.php
src/Acme/DemoBundle/Resources/config/doctrine/Product.orm.yml

の2つのファイルが作られます。 doctrine:generate:entityで--format=ymlを付けないとProduct.orm.ymlファイルが作成されませんので注意です。

$ php app/console doctrine:database:create
$ php app/console doctrine:schema:update --force

でデータベースにテーブルを作りモデルと同期させます。

// src/Acme/DemoBundle/Controller/DemoController.phpなどで
use Acme\DemoBundle\Entity\Product;

public function indexAction()
{

    $product = new Product();
    $product->setName('Foo bar');
    $product->setPrice(100.00);
    $product->setDescription('This is test description.');
    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($product);
    $em->flush();
    
    echo $product->getId();
}

とテストコードが動けば問題ないでしょう。
http://hostname/app_dev.php/demo/
などでアクセスできると思います(環境によって異なります)。

この辺のはなしは
http://docs.symfony.gr.jp/symfony2/book/doctrine.html
にもあります。ただ、私はこのチュートリアルではしっかりと動作しませんでした。