我想在控制器中使用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} }
}
答案 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了解如何在控制器方法中执行此操作。