我有一个symfony任务,创建了一个上下文实例:
sfContext::createInstance($this->configuration);
由于调用get_component
辅助函数(为了生成电子邮件正文),因此需要上下文。我知道sfContext::getInstance() is bad,但我没有写它,也无法删除它。
我的问题是此行触发了与路由相关的消息的记录:
>> sfPatternRouting Match route "homepage" (/) for / with parameters array ( 'module' => 'default', 'action' => 'index',)
如何让sfRouting闭嘴?我不断收到来自我的crontab的电子邮件,重复这条无用的信息。
如何更改配置以便传递给路由构造函数的选项不包含"logging" => "true"
?
无论我的factories.yml文件包含什么,我都希望关闭路由。
当然,它有一个错误,无论是记录到STDOUT还是STDERR,我还是想收到一封电子邮件。
弗拉德告诉我我的代码,所以我创建了一个小项目,以便您可以轻松地重现该错误。 这是:https://github.com/greg0ire/pwet如果你想轻松重现这个bug,我创建了一个全新的虚拟项目,你可以克隆它。 以下是重现错误的步骤:
git clone git://github.com/greg0ire/pwet.git
cd pwet
git submodule init
git submodule update
php web/frontend_dev.php
./symfony pwet --application="frontend"
请注意php web/frontend_dev.php
的重要性。它不会生成与CLI相同的缓存文件
答案 0 :(得分:1)
我能够通过创建一个名为“task”的新环境并将“路由”类配置为一个名为“DummyRouting”的新类来实现这一目标。
应用/前端/配置/ factories.yml文件:
task:
routing:
class: DummyRouting
DummyRouting.class.php
class DummyRouting extends sfPatternRouting
{
public function connect($name, $route)
{
}
public function parse($url)
{
return false;
}
}
当然,为方便起见,请确保将“任务”环境指定为默认值。
configure()
中的YourTask.class.php...
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'task'),
...
答案 1 :(得分:0)
只有在调试(默认情况下为dev环境)
时才会发生这种情况环境的默认值在任务的configure方法中定义(类似于我的prev消息中的行)。执行任务时,可以在命令行中使用参数--env=dev/prod/stage/etc
覆盖它。您可能希望切换到生产环境(prod),这样您就不会看到与路由相关的消息(或其他调试消息)。这是我的一个任务的例子:
protected function configure()
{
$this->addOptions(array(
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'),
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'prod'),
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
));
// other stuff here
}
答案 2 :(得分:-1)
将logging
设置为false
的唯一方法是在factories.yml
中手动执行:
prod:
routing:
param:
logging: false
使用此解决方案,我的任务现在很安静!