Symfony 2,是否可以定义条件路线?

时间:2015-11-06 19:19:03

标签: php symfony routes

我想在控制器中使用if..else语句进行操作,该语句分析路由并相应地执行操作。这可能吗?

路线:blog\post\{tag} or blog\post. tag是一个数组,因此很可能看起来像?tag = 1,2,3,4,51

controller action diplaypost()
{
if (!isset($_GET['tag'])) {do smth; //case of route blog\post}
else {do smth; //case of route blog\post\{tag} }
}

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式获取当前路线的名称:

$route = $request->attributes->get('_route');

现在,您可以使用$route来获得所需的逻辑。

答案 1 :(得分:0)

您想要做什么(您正在执行的操作是什么)与每条路线?第一个是按标签过滤帖子列表而第二个是仅显示所有帖子吗?实际上,这两条路线将进行相同的操作,并将定义为

blog_post:
    path: blog/post
    defaults: { _controller: YourController:YourAction, tag: null }

blog_post_tag:
    path: blog/post/{tag}
    defaults: { _controller: YourController:YourAction }

然后您的控制器操作将是:

public function yourAction($tag = null)
{
    if ($tag === null) {
        // something
    } else {
        // something else
    }
}

虽然@Elnur Abdurrakhimov对他的答案是正确的,但这样做通常是指示代码气味,如果可能的话应该避免。

同样在您的示例中,您使用的是超级全局$_GET,您在Symfony 2中不应该这样做,并且应该使用Request对象。 See the documentation了解如何在控制器方法中执行此操作。