是否可以覆盖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
如果有可能,我在哪里可以找到要覆盖的代码?
答案 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中的原始任务