効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門を写経していたところ、Timestampable の導入のところでハマったので導入方法と使用方法をメモします。
StofDoctrineExtensionsBundle のマニュアルにも、書籍にも、git submodule を使用したインストール方法が書かれていますが、この方法ではうまく導入できませんでした。この記事では、deps ファイルを編集してインストールする方法を紹介します。
動作確認環境
- Symfony 2.0.15
目次
- Symfony/depsファイルの編集
- インストール
- Symfony/app/autoload.phpの編集
- Symfony/app/AppKernel.phpの編集
- Symfony/app/config.ymlファイルの編集
- Entityの編集
- 動作確認
- 参考サイト
Symfony/depsファイルの編集
Symfony/deps ファイルに下記を追加します。私は[doctrine]ブロックの上に追加しました。
...
[gedmo-doctrine-extensions]
git=https://github.com/l3pp4rd/DoctrineExtensions.git
target=/gedmo-doctrine-extensions
[DoctrineExtensionBundle]
git=https://github.com/stof/StofDoctrineExtensionsBundle.git
target=/bundles/Stof/DoctrineExtensionsBundle
...
インストール
下記コマンドを実行します。結構時間がかかります。
$ php bin/vendors install --reinstall
Symfony/app/autoload.phpの編集
Symfony/app/autoload.php の $loader->registerNamespaces() メソッドの引数に下記を追加します。私は一番下に追加しました。
$loader->registerNamespaces(array(
...
'Gedmo' => __DIR__.'/../vendor/gedmo-doctrine-extensions/lib',
'Stof' => __DIR__.'/../vendor/bundles',
...
));
Symfony/app/AppKernel.phpの編集
Symfony/app/AppKernel.php の registerBundles() メソッドの $bundles 変数に下記を追加します。私は一番下に追加しました。
public function registerBundles()
{
...
$bundles = array(
...
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
...
);
...
}
Symfony/app/config.ymlファイルの編集
Symfony/app/config.yml ファイルに下記を追加します。私は一番下に追加しました。
...
stof_doctrine_extensions:
orm:
default:
timestampable: true
...
Entityの編集
createdAt と updateAt のアノテーションを編集します。
<?php
namespace My\BlogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* My\BlogBundle\Entity\Post
*
* @ORM\Table(name="post")
*/
class Post
{
// Properties
// ...
/**
* @var datetime $createdAt
*
* @ORM\Column(name="created_at", type="datetime", nullable=false)
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @var datetime $updatedAt
*
* @ORM\Column(name="updated_at", type="datetime", nullable=false)
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
// ...
// Methods
// ...
}
動作確認
エンティティマネージャ経由でデータを登録して createAt と updateAt が自動で設定されていることを確認します。