2

Symfony 1.4 CLI コマンドを上書きすることは可能ですか?

より具体的には、このコマンドをオーバーライドできるかどうか疑問に思っていました:

php symfony doctrine:build-schema

私がやりたいことは、見つけた接続ごとに database.yml ファイルに新しいオプションを追加することです。追加したいオプションはパッケージ オプション
なので、仮想的な接続は次のようになります。

all:
  doctrine:
    class: sfDoctrineDatabase
    package: myPackageOption
    param:
      dsn: 'mysql:host=localhost;dbname=my_db_name'
      username: db_user
      password: db_password

可能であれば、オーバーライドするコードはどこにありますか?

4

2 に答える 2

0

タスクをオーバーライドしようとしていますが、機能させることはできませんが、

doctrine タスクを継承する独自のタスクを作成して、独自の作業を行うことができます: lib/task に sfDoctrineBuildSchemaCustomTask.class.php を追加します。

class sfDoctrineBuildSchemaCustomTask extends sfDoctrineBuildSchemaTask
{
  /**
   * @see sfTask
   */
  protected function configure()
  {
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_OPTIONAL, 'The application name', true),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
    ));

    $this->namespace = 'doctrine';
    $this->name = 'build-schema-custom';
    $this->briefDescription = 'Creates a schema from an existing database';

    $this->detailedDescription = <<<EOF
The [doctrine:build-schema|INFO] task introspects a database to create a schema:

  [./symfony doctrine:build-schema|INFO]

The task creates a yml file in [config/doctrine|COMMENT]
EOF;
  }

  /**
   * @see sfTask
   */
  protected function execute($arguments = array(), $options = array())
  {
        // do your stuff before original call
    parent::execute($arguments,$options);
        // do your stuff after original call

  }
}

次に、php symfony doctrine:build-schema-custom を呼び出して実行します!


あるいは、lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildSchemaTask.class.php にある元のタスクを編集することもできます。

于 2012-09-17T17:14:07.187 に答える
0

databses.yml を事前に生成し、php symfony doctrine:build-schema を自動起動するシェル スクリプトを使用することをお勧めします。何かのようなもの:

プロジェクトのルート フォルダー内の build.sh:

#!/bin/bash
cp config/databases_1.yml config/databases.yml
php symfony doctrine:build

次に、コンソールに ./build.sh (実行権限を追加した後) と入力します。

複数の database_xxx.yml のコピー/置換が最も簡単な例です。ただし、必要な処理を行うことができます。

シェル スクリプトについてわからない場合は、php スクリプトを使用してもファイルを変更できるため、build.sh は次のようになります。

#!/bin/bash
php pregenerate_databases.php
php symfony doctrine:build
于 2012-09-07T15:18:49.110 に答える