2012-06-06 13 views
5

// MySomethingController.phpFOSRestBundle añade 'S' en la URL get

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

// routing.yml

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

en marcha:

php app/console router:debug 

Salida:

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

¿Por qué la ruta es "algo" (plural con una "s") en lugar de "algo"?

¿este es un ajuste que tengo en algún lado? o es esto esperado?

+0

La documentación decir que es correcta: https : //github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/doc/5-automatic-route-generation_single-restful-controller.md, (Compruebe el método 'getUserAction') – eagleoneraptor

+0

@eagleoneraptor lo han configurado para use usuarios con una 's' # app/config/routing.yml usuarios, a menos que pueda indicar dónde esto dice esto –

Respuesta

3

después de cavar en el código:

Aquí está:

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

He abierto un problema:

con la esperanza de que esto se convertiría opcional

3

Esta es una respuesta de actualización basado en el billete abierto por @phillpafford.

Ismith77 commented en el billete y pensé que se explica muy bien por qué:

Sin la pluralización no sabríamos la relación entre los métodos que va a ser importante, por ejemplo, cuando la aplicación de # 52. además, es una idea clave de REST que tenemos GET para que un solo elemento en una colección esté en un "subdirector" de la propia colección .

Así que si lo hace "adecuada" RESTO continuación /member/{id}.{_format} sería extraño nombrado pero sería realmente mal si su colección en sí no sería entonces también residen en/miembro de {. formato}.

La esencia de todo esto es ... la solución no es tanto acerca de la conveniencia de como de hacer cumplir a las personas que realmente siguen los principios de REST .

PS: Sin embargo, me gustaría señalar que cuando se tiene una palabra como "datos", que es plural por sí mismo esto es un poco molesto ...

+0

Por alguna razón funciona bien para las acciones DELETE: POST ANY ANY/auths/refreshes ELIMINAR CUALQUIER OTRO/auth/logout –

Cuestiones relacionadas