Symfony 1.4:覆盖doctrine:build-schema命令

时间:2012-08-30 07:43:10

标签: doctrine symfony-1.4 command-line-interface

是否可以覆盖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

如果有可能,我在哪里可以找到要覆盖的代码?

2 个答案:

答案 0 :(得分:0)

我建议你使用一些预先生成databses.yml的shell脚本,然后自动调用php symfony doctrine: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

答案 1 :(得分: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 doctrine:build-schema-custom,然后去!


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