1

我正在寻找以下问题的解决方案:

在 symfony 1.4 项目中,我有 2 个应用程序:frontendbackend. 每当我运行 symfony cli 任务时,symfony默认php symfony doctrine:build --all-classes使用该应用程序。backend

如何让 symfony clifrontend用作默认应用程序?

我知道我可以运行相同的命令,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'),

替换backendfrontend

编辑:

根据您的发现(关于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 回答
0

这已经晚了四年,希望 Symfony 1.x 现在没有被太多使用,但是文件系统决定了默认应用程序是什么。应用程序查询应用程序目录,第一个文件夹用作默认应用程序。因此,您可以通过修改文件系统来破解它,但强烈建议不要这样做。

于 2016-01-13T10:52:32.193 回答