The symfony and Doctrine book

3章 - 設定

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony and Doctrine book" which is licensed under the GFDL license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com

Chapter Content

属性

グローバル

すべての接続

モデル

モデルのビルド方法を設定する

Doctrineライブラリパスをカスタマイズする

symfony training
Be trained by symfony experts
May 29: Paris (Web Development with Symfony2 - Français)
May 31: Paris (Mastering Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - English)
Jun 06: Paris (Going Further with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony and Doctrine book" in Japanese for the 1.2 version - Switch to language:
This work is licensed under a GFDL license.
This version of symfony is not maintained anymore.
If some of your projects still use this version, consider upgrading as soon as possible.

属性

Doctrineは機能と設定を属性(attribute)で制御します。属性を異なるレベルの階層で定義できます。 属性の中にはすべてのレベルで指定できるものもあればそうではないものもあります。 この章ではそれぞれのレベルで属性を指定する方法を説明します。属性は、個別の接続、モデルごとにグローバルに指定できます。

symfonyではconfig/ProjectConfiguration.class.phpもしくはapps/appname/config/appnameConfiguration.class.phpの中でDoctrineの構成を制御できます。

グローバル

設定の中でconfigureDoctrine()を作ることでグローバル属性を制御できます。 すべてのグローバル属性はSingletonのDoctrine_Managerインスタンスで設定されます。 sfDoctrinePluginconfig.phpがロードされるときにこのメソッドが起動します。 これは接続が存在する前なので、この時点ではDoctrine_Manager属性のみが制御できます。

public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setAttribute('use_dql_callbacks', true);
  $manager->setAttribute('use_native_enum', true);
}

すべての接続

設定クラスの中でconfigureDoctrineConnection()を作ることで接続属性ごとに制御できます。 config/databases.ymlで記述されている順序でそれぞれの接続がsymfonyによってインスタンス化されるときsfDoctrineDatabaseの中でこのメソッドが呼び出されます。

public function configureDoctrineConnection(Doctrine_Connection $connection)
{
  $connection->setAttribute('use_dql_callbacks', true);
  $connection->setAttribute('use_native_enum', true);
}

オプションとしてconfig/doctrine/databases.ymlの中で接続属性を直に指定することもできます:

doctrine:
   class: sfDoctrineDatabase
   param:
     dsn: 'mysql:host=localhost;dbname=dbname'
     username: user
     password: secret
     attributes:
       use_dql_callbacks: true
       use_native_enum:  true

それぞれの接続ごとに異なる設定を用意するのであれば個別の接続ごとに起動する特別な関数を作ることもできます。 masterという名前の接続を用意するのであればconfig/ProjectConfniguration.class.phpファイルの中でconfigureDoctrineConnectionMaster()という名前の関数を作ることが必要になります。

public function configureDoctrineConnectionMaster(Doctrine_Connection $connection)
{
  $connection->setAttribute('use_dql_callbacks', false);
  $connection->setAttribute('use_native_enum', false);
}

上述の例では、use_dql_callbacksuse_native_enumはmaster接続以外に対して有効です。

モデル

Doctrine用の最後のレベルの階層はモデルです。YAMLフォーマットのモデルの定義で属性を直に指定できます。

Store:
  connection: client
  attributes:
    export: tables
  columns:
    name: string(255)
    description: string(500)

PHPコードを利用して属性をlib/model/doctrineの中の生成モデルクラスに設定することもできます。 lib/model/doctrine/Store.class.phpを確認して追加属性をいくつか指定するためにsetTableDefinition()をオーバーライドします。

public function setTableDefinition()
{
  parent::setTableDefinition();
  $this->setAttribute('export', 'tables');
}

モデルのビルド方法を設定する

sfDoctrinePluginはモデルのデフォルトのビルド方法のオプションをいくつか上書きする機能を提供します。 これらの設定はsfConfigクラスの中でdoctrine_model_builder_optionsという名前のパラメーターを使うことで制御できます。

モデルを生成するときに使われる基底クラスを変更する例は次の通りです。 基底クラスをたとえばmyDoctrineRecordと設定できます。 symfonyのオートロード機能がクラスを見つけられるようになっているか確認してください。

public function configureDoctrine(Doctrine_Manager $manager)
{
  $options = array('baseClassName' => 'myDoctrineRecord');
  sfConfig::set('doctrine_model_builder_options', $options);
}

クラスを必ず作ってください。たとえば、sfproject/lib/myDoctrineRecord.class.phpのPHPコードは次の通りです。

class myDoctrineRecord extends sfDoctrineRecord
{
}

モデルを生成するとき、すべてのクラスはsfDoctrineRecordの代わりにmyDoctrineRecordを継承するのですべてのモデルにカスタムの機能を追加できます。

モデルのビルドプロセスのための異なる値に変更できるすべてのオプションの一覧です。

名前 説明 デフォルト
suffix 生成クラス用に使うサフィックス .class.php
generateBaseClasses 基底クラスを生成するかどうか true
generateTableClasses テーブルクラスを生成するかどうか true
baseClassPrefix 基底クラスに使うプレフィックスの単語 Base
baseClassesDirectory 基底クラスを生成するディレクトリ base
baseClassName モデルが継承するスーパークラス sfDoctrineRecord

Doctrineライブラリパスをカスタマイズする

sfDoctrinePluginを利用すれば、設定値を1つ変更するだけで、簡単に使用中のDoctrineのバージョンを切り替えることができます。

たとえば異なるバージョンのDoctrineを使うようにsfDoctrinePluginを設定する方法を以下に示します。

まず、lib/vendor/doctrineで使いたいバージョンのDoctrineをチェックアウトする必要があります。

$ mkdir lib/vendor
$ cd lib/vendor
$ svn co http://svn.doctrine-project.org/branches/1.0.10/lib doctrine

これで、プラグインとしてバンドルされていたバージョンの代わりに、さきほどチェックアウトしたバージョンを設定できます。 次のように、ProjectConfiguration::setup()メソッドとsfConfigで、sfDoctrinePlugin_doctrine_lib_pathの値を変更する必要があります:

public function setup()
{
  sfConfig::set('sfDoctrinePlugin_doctrine_lib_path', sfConfig::get('sf_lib_dir') . '/vendor/doctrine/Doctrine.php');
}

設定に関する詳細はDoctrineの公式マニュアルで見ることができます。

4章 - スキーマファイル »
« 2章 - 接続

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.