1

私は次の問題の解決策を探しています:

symfony 1.4プロジェクトには、2つのアプリケーションがあります:frontendbackend。のようなsymfonycliタスクを実行するときはいつでもphp symfony doctrine:build --all-classes、symfonyはbackendデフォルトとしてアプリケーションを使用します。

frontendsymfony cliをデフォルトのアプリケーションとして使用するにはどうすればよいですか?

と同じコマンドを実行できることはわかっていますが、アプリをデフォルトとしてphp symfony --application=frontend doctrine:build --all-classes使用する方法が必要です。frontend

編集:

このメソッドはで見つかりましたlib/vendor/symfony/lib/task/sfBaseTask.class.php

/**
 * Returns the first application in apps.
 *
 * @return string The Application name
 */
protected function getFirstApplication()
{
    if (count($dirs = sfFinder::type('dir')->maxdepth(0)->follow_link()->relative()->in(sfConfig::get('sf_apps_dir'))))
    {
        return $dirs[0];
    }

   return null;
}

順序はアルファベット順のようです...

ありがとう。

4

3 に答える 3

1

タスクのメソッドをチェックインconfigureすると、次のように表示されます。

new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'backend'),

backendで置き換えfrontendます。

編集:

( について) 見つけたことによるとgetFirstApplication、最良の解決策は/lib/task/myDoctrineBuildTask.class.php、現在のドクトリン タスクを拡張する独自のタスク ( ) を作成することです。次に、メソッドでfrontendアプリケーションを定義します。configure

class myDoctrineBuildTask extends sfDoctrineBuildTask
{
  /**
   * @see sfTask
   */
  protected function configure()
  {
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_OPTIONAL, 'The application name', 'frontend'),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
      new sfCommandOption('no-confirmation', null, sfCommandOption::PARAMETER_NONE, 'Whether to force dropping of the database'),
      new sfCommandOption('all', null, sfCommandOption::PARAMETER_NONE, 'Build everything and reset the database'),
      new sfCommandOption('all-classes', null, sfCommandOption::PARAMETER_NONE, 'Build all classes'),
      new sfCommandOption('model', null, sfCommandOption::PARAMETER_NONE, 'Build model classes'),
      new sfCommandOption('forms', null, sfCommandOption::PARAMETER_NONE, 'Build form classes'),
      new sfCommandOption('filters', null, sfCommandOption::PARAMETER_NONE, 'Build filter classes'),
      new sfCommandOption('sql', null, sfCommandOption::PARAMETER_NONE, 'Build SQL'),
      new sfCommandOption('db', null, sfCommandOption::PARAMETER_NONE, 'Drop, create, and either insert SQL or migrate the database'),
      new sfCommandOption('and-migrate', null, sfCommandOption::PARAMETER_NONE, 'Migrate the database'),
      new sfCommandOption('and-load', null, sfCommandOption::PARAMETER_OPTIONAL | sfCommandOption::IS_ARRAY, 'Load fixture data'),
      new sfCommandOption('and-append', null, sfCommandOption::PARAMETER_OPTIONAL | sfCommandOption::IS_ARRAY, 'Append fixture data'),
    ));

    $this->namespace = 'mydoctrine';
    $this->name = 'build';

    $this->briefDescription = 'Generate code based on your schema';

    $this->detailedDescription = ''; // feel free to re-add all the doc
  }
}

次に、次を使用してビルドを起動します。php symfony mydoctrine:build --all-classes

于 2012-05-16T13:36:35.153 に答える
0

特定のアプリケーションなしでタスクを実行するとcache:clear、Symfony はすべてのアプリケーションのキャッシュをクリアします。これは、このタスクのソースで確認できます。デフォルトのアプリケーションを提供する (自分で作成した) タスクの場合は、それを必要なものに変更するだけです。

于 2012-05-16T13:35:06.173 に答える