我正在寻找以下问题的解决方案:
在symfony 1.4项目中,我有2个应用程序:frontend
和backend
。
每当我运行像php symfony doctrine:build --all-classes
这样的symfony cli任务时,symfony都会使用
默认情况下backend
应用程序。
如何让symfony cli使用frontend
作为默认应用程序?
我知道我可以运行与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;
}
似乎订单是按字母顺序排列的......
感谢。
答案 0 :(得分:0)
当您在没有特定应用程序的情况下运行cache:clear
任务时,Symfony会清除所有应用程序的缓存。这可以在source of this task中观察到。对于提供默认应用程序的任务(您自己创建的),您只需将其更改为您想要的任何内容即可。
答案 1 :(得分:0)
检查任务的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
答案 2 :(得分:0)
这已经太晚了四年了,希望Symfony 1.x最近用得不多,但文件系统确定了什么是默认应用程序。应用程序查询应用程序目录,第一个文件夹用作默认应用程序。因此,您可以通过修改文件系统来破解它,但强烈建议不要这样做。