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

时间:2013-09-27 19:11:13

标签: php url path symfony-2.3

我是Symfony的初学者,我正试图从这样格式化的网址中获取所有部分:

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

# 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函数参数,您可以根据需要使用该参数。如果你的请求url中只有/ hello没有任何后续内容,那么你将找不到异常。路线是唯一的,参数的名称和数量定义了将采取的路线。

现在,根据您的问题,我收集您希望拥有未知数量的此类参数。我认为这在Symfony中是不可能的。说实话,我认为在任何MVC框架中都不可能。我认为你选择了错误的方法。如果我是你,那就是我要做的事。

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

希望这能让您对问题有另一种观点。如果你想进一步讨论,只需拍摄。