如何从 Symfony2 路径获取路径部分


How to get path parts from Symfony2 path

我是Symfony的初学者,我正在尝试从格式化如下的url中获取所有部分:

...pathToSite/Symfony/pathToBundleControllerAction/part1/part2/...../partN

我将能够单独获取所有part[1..N],因为目标是具有未知长度的路径,以通过单个路由将一些不同的数据类型推送到服务器。

我已经尝试了一些在网络上找到的变体,例如$this->getRequest()->query->all()(在控制器中(,但这些都没有达到我的预期。

也许有一个非常简单的解决方案,通过修改路由或其他方式?

谢谢。

好吧,要回答您的问题,您不需要解析这些,它们是请求的一部分,应该唯一地定义请求。例如,您有以下众所周知的示例:

# routing.yml:
dummy_page_homepage:
    pattern:  /hello/{name}
    defaults: { _controller: DummyPageBundle:Default:index }
// DefaultController.php
public function indexAction($name)
{
    return $this->render('DummyPageBundle:Default:index.html.twig', array('name' => $name));
}

看看 {name} 和 $name 如何配合?这意味着/hello/...被解析并传递给 name 函数参数,您可以根据需要使用它。如果您只有/hello 而您的请求 url 中没有任何内容,您将获得未找到异常。路由是唯一的,参数的名称和编号定义了将采用的路由。

现在,从你的问题中,我发现你想要一个未知数量的这样的参数。我认为这在Symfony中是不可能的。老实说,我认为这在任何MVC框架中都是不可能的。我认为你选择了错误的方法。如果我是你,这就是我会做的。

首先,您似乎正在尝试将数据发送到服务器以进行某种插入/更新功能。看看HTTP标准,GET请求应该按照它的名字做,从服务器获取一些东西而不修改它。这意味着您应该使用 POST 请求。如果是这种情况,您可以自由地填充诸如 POST 变量之类的长变量并将它们发送到服务器,而不会遇到很多问题。然后,你可以使用服务器逻辑来获取和解析这些变量(Symfony使得使用检索到的请求对象实例轻松获取GET或POST变量(。此外,我很确定(尽管不是 100%(您只能将有限数量的数据填充到 GET 变量中,并且请求部分本身的长度也是有限的。这就是为什么你应该使用 POST 变量。如果 POST 数组变量更适合您的用例,您也可以自由发送它,并填充值 part1、part2...部分作为数组值。

希望这能给你关于你的问题的另一个观点。如果你想进一步讨论它,就拍吧。