2012-08-30 154 views
2

是否可以重写Symfony 1.4 CLI命令?Symfony 1.4:覆盖原则:build-schema命令

更具体地说,我想知道是否有可能重写此命令:

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

我会说*是*。但最后你想达到什么目的? – j0k

+0

...我想添加一些其他选项到database.yml,所以当我运行build-schema命令时,它“使用”新选项 – ilSavo

+0

我从来不这样做,但我认为你将不得不深入研究教义一代覆盖你想要的。但是,也许你可以在你关于'database.yml'中添加什么的问题中添加更多信息。 – j0k

回答

0

我建议你使用一些shell脚本预先生成databses.yml,然后自动invoque 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 
+0

稍等片刻,我已经可以编写一些shell脚本,但我的问题不是这样。我的问题是:是否可以用symfony的内置命令原则:构建模式,如果是,如何? – ilSavo

0

我试图覆盖任务但我不能让它工作,但:

您可以创建自己的任务,继承学说的任务,做你的东西:在LIB /任务添加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 /供应商提供的原始任务/ symfony的/ lib目录/插件/ sfDoctrinePlugin/lib中/任务/ sfDoctrineBuildSchemaTask.class.php