2012-08-30 100 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