5

// MySomethingController.php

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

// ルーティング.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}

ルートが「something」ではなく「somethings」(「s」を含む複数形) になっているのはなぜですか?

これは私がどこかに持っている設定ですか?またはこれは予想されますか?

4

2 に答える 2

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;
}

問題を開きました:

これがオプションになることを期待して

于 2012-06-07T17:07:24.830 に答える
3

これは、@phillpafford によって開かれたチケットに基づく最新の回答です。

Ismith77がチケットについてコメントし、その理由を非常によく説明していると思いました。

複数形がなければ、たとえば #52 を実装するときに重要になるメソッド間の関係がわからないでしょう。さらに、コレクション内の単一の要素の GET をコレクション自体の「サブディレクトリ」に置くことが REST の重要なアイデアです。

したがって、「適切な」REST を実行すると、/member/{id}.{_format} という名前が奇妙になりますが、コレクション自体が /member{.format} の下にも存在しない場合、実際には間違っています。

これらすべての要点は、.. 現状のソリューションは利便性ではなく、実際に REST の原則に従うことを人々に強制することです。

PS: ただし、「データ」のような複数形の単語がある場合、これは少し面倒なことを指摘したいと思います...

于 2013-04-30T16:19:31.757 に答える