FOSRestBundle增加了' S'在获取URL

时间:2012-06-06 20:58:08

标签: php symfony fosuserbundle

// MySomethingController.php

// look no s
public function getSomethingAction($args)
{
    ...
}

// routing.yml

my_something:
    type:     rest
    resource: Blah\Bundle\BlahBundle\Controller\MySomethingController

运行:

php app/console router:debug

输出:

[router] Current routes
Name                Method     Pattern
get_something       GET        /somethings/{args}.{_format}

为什么路线''somethings'(复数带有's')而不是'某事'?

这是我在某处的设置吗?或者这是预期的吗?

2 个答案:

答案 0 :(得分:3)

在挖掘代码后

这是:

private function generateUrlParts(array $resources, array $arguments)
{
    $urlParts = array();
    foreach ($resources as $i => $resource) {
        // if we already added all parent routes paths to URL & we have
        // prefix - add it
        if (!empty($this->routePrefix) && $i === count($this->parents)) {
            $urlParts[] = $this->routePrefix;
        }

        // if we have argument for current resource, then it's object.
        // otherwise - it's collection
        if (isset($arguments[$i])) {
            if (null !== $resource) {
                $urlParts[] =
                    strtolower(Pluralization::pluralize($resource))
                    .'/{'.$arguments[$i]->getName().'}';
            } else {
                $urlParts[] = '{'.$arguments[$i]->getName().'}';
            }
        } elseif (null !== $resource) {
            $urlParts[] = strtolower($resource);
        }
    }

    return $urlParts;
}

我已经开了一个问题:

希望这会成为可选的

答案 1 :(得分:3)

这是基于@phillpafford打开的门票的更新答案。

机票上有

Ismith77 commented,我认为原因很清楚:

  

如果没有复数,我们就不会知道它们之间的关系   这种方法在例如何时非常重要   实施#52。此外,它是我们拥有的REST的关键理念   集合中的单个元素的GET位于的“子目录”中   收藏本身。

     

因此,如果您执行“正确”的REST,那么/member/{id}.{_format}将会很奇怪   如果您的收藏品本身就会被命名,但实际上是错的   然后也不会驻留在/member {.format}下。

     

所有这一切的要点是......解决方案不是那么多   方便而不是强制人们实际遵循REST   原理

PS:不过我想指出的是,当你有一个像“数据”这样的词时,它本身就是复数,这有点烦人......