【问题标题】:Symfony 1.4: Override doctrine:build-schema commandSymfony 1.4:覆盖学说:build-schema 命令
【发布时间】:2012-08-30 07:43:10
【问题描述】:

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

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

【问题讨论】:

  • 我会说是的。但是你最终想要达到什么目标呢?
  • ...我想在 database.yml 中添加一些其他选项,所以当我运行 build-schema 命令时,它会“使用”新选项
  • 我从不这样做,但我认为你必须深入研究 Doctrine 一代来覆盖你想要的东西。但也许您可以在问题中添加更多信息,了解您想在database.yml 中添加什么。

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


【解决方案1】:

我建议您使用一些预先生成 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

【讨论】:

  • 等一下,我已经可以写一些shell脚本了,但我的问题不是这个。我的问题是:是否有可能覆盖 symfony 的内置命令学说:build-schema,如果是,如何?
【解决方案2】:

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

您可以创建自己的任务来继承教义任务并做自己的事情: 在 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 中的原始任务

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多