symfony link_to在行动中

时间:2011-12-13 10:50:05

标签: php model-view-controller symfony1 symfony-1.4 link-to

我需要在用户反馈中提供一个链接(通过setFlash方法)。所以在我的processForm()函数中,我想使用link_to,但由于symfony严格的MVC策略,这不起作用。我尝试手动编写<a href='#">somelink</a>,然后按原样打印。

可以解决这个问题?

3 个答案:

答案 0 :(得分:6)

您可以访问控制器中的“路由”。实际上,它有一个快捷方法:

所以在你的行动中:

$url = $this->generateUrl('your_route_name', array(/* parameters */));

对Symfony MVC完全有效:)

要在闪光灯中使用此功能,您可以执行以下操作:

$this->getUser()->setFlash('success_raw', 'Click <a href="'.$url.'">here</a>');

然后在你的视图中渲染:

echo $sf_user->getFlash('success_raw', ESC_RAW);

最后一部分在输出中呈现任何HTML实体,因此始终确保数据是安全的。如果它包含任何用户输入,则应确保对其进行过滤。

答案 1 :(得分:1)

在您的操作中,您可以使用$this->generateUrl(),其效果与link_to类似。

答案 2 :(得分:0)

这可以通过修改打印flash消息的部分来完成。

例如

你有这段代码:

控制器部分:

// Form save success.
$this->getUser()->setFlash('success', 'This is a ' . link_to('@myRouteName', 'link') . ' for testing.');

在您看来:

<?php
if ($sf_user->hasFlash('success'):
  echo $sf_user->getFlash('success');
endif;
?>

如您所见,Flash消息的标识符为success。这将打印出您为flash变量指定的确切文本。您可以使用getRawValue()功能打印出链接:

在您看来:

<?php
if ($sf_user->hasFlash('success'):
  echo $sf_user->getRawValue()->getFlash('success');
endif;
?>

有关Symfony中输出转义的更多信息,请访问:http://www.symfony-project.org/api/1_4/sfOutputEscaper