我是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...部分作为数组值。
希望这能给你关于你的问题的另一个观点。如果你想进一步讨论它,就拍吧。