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

我建议您使用一些预先生成 databses.yml 的 shell 脚本,然后自动调用 php symfony 学说:build-schema。就像是:

build.sh,在项目根文件夹中:

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

然后,在控制台中输入 ./build.sh(添加执行权限后)。

多个databases_xxx.yml的复制/替换是最简单的例子。但是你可以做任何你想做的处理。

如果您不了解 shell 脚本,您甚至可以使用 php 脚本进行文件修改,因此您的 build.sh 应该如下所示:

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

我正在尝试覆盖该任务,但无法使其正常工作,但是:

您可以创建自己的任务来继承教义任务并执行您的工作:在 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 学说:build-schema-custom,然后开始!


或者,也许,您可以编辑位于 lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildSchemaTask.class.php 中的原始任务

于 2012-09-17T17:14:07.187 回答