我必须在任务中生成一个URL,但是我得到一个不正确的类型URL:
./symfony/user/edit/id
当我需要时
/user/edit/id
我的第一次尝试是:
protected function execute($arguments = array(), $options = array())
{
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true);
$this->context = sfContext::createInstance($configuration);
$baseurl = $this->context->getController()->genUrl(array('module' => 'user','action' => 'edit', 'id' => $id));
// ...
}
我的第二次尝试,在this answer之后提供了相同的错误网址:
protected function execute($arguments = array(), $options = array())
{
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true);
$this->context = sfContext::createInstance($configuration);
$routing = $this->context->getRouting();
$baseurl = $routing->generate('user_edit', array('id' => $id));
// ...
}
如何获取正确的网址?
答案 0 :(得分:2)
您是否尝试过snippet的解决方案?我在很多项目中使用过这个。
我也使用了你描述的几乎相同的第二种解决方案,但有点不同:
// you get the context the same way
$context = sfContext::createInstance($configuration);
$this->controller = $context->getController();
$baseurl = $this->controller->genUrl('user_edit?id='.$id);
检查genUrl
的参数,您可以将true / false作为绝对URL的第二个参数。
答案 1 :(得分:2)
我解决了添加--application选项的问题!
protected function configure()
{
$this->addOptions(array(
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'),
));
//...
}
即使我直接在getApplicationConfiguration参数中写了它的名字,我也不知道它是必需的。
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true);