SilexでDoctrinを使う

2016.12.6 (火)

SymfonyでもおなじみのDoctrinですがここではSilexでの基本的な設定方法です。DB接続にDoctrinを使うのでインストールからはじめます。

Doctrine DBALのインストール

composer.jsonに以下のように追加して./composer.phar updateという感じになります。バージョンはその時々で合わせてください。
Silexのfatだったら最初から入ってます。

{
    "require": {
        ....
        "doctrine/dbal": ">=2.2.0,<2.4.0-dev",
        ....
    }
}

サービスプロバイダーの設定

Doctrinをサービスプロバイダーとして設定します。とても便利です。

use Silex\Provider\DoctrineServiceProvider;

// Doctrin 
$app->register(new DoctrineServiceProvider(), array(
  'db.options' => array(
    'dbname'   => 'DBNAME',
    'user'     => 'USERNAME',
    'password' => 'PASSWORD',
    'host'     => 'HOSTNAME',
    'driver'   => 'pdo_mysql',
    'charset'  => 'utf8',
  ),
));

useでSilexのプロバイダーを呼びます。実際のこのクラスは、./vendor/silex/silex/src/Silex/Provider/DoctrineServiceProvider.phpにあります。Doctrineのサービスプロバイダーがやっていることが概ねわかるかと思います。mysqlを使う場合はpdo_mysqlでutf8を指定します。
上記のような典型的な設定は、オブジェクトで$app[‘db’]に入ってくるので接続できてるか確認できます。

var_dump($app['db']);

クエリの発行

単純にテーブルの全データをフェチします。

$row = $app['db']->fetchAll('SELECT * FROM tablename');
var_dump($row);

これでDoctrinが使える状態になってます。


http://silex-users-jp.phper.jp/doc/html/providers/doctrine.html