如何让sfRouting在任务中闭嘴?

时间:2012-12-05 14:27:36

标签: logging symfony1 symfony-1.4

我有一个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相同的缓存文件

3 个答案:

答案 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

使用此解决方案,我的任务现在很安静!