api-platform / api-platform/core

Allow dot in IRI

Aperta
#8,003 2 commenti 14 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
PHP
Stelle
2.6k
Fork
980
Merge medio
2g 4h
PR unite (30g)
49

Descrizione

**Description**
It is currently not possible to have a dot "**.**" in an IRI.
Effectively, posting a resource containg a dot in its `id` would lead to the following error : "Unable to generate an IRI for "MyClass", triggered into **api-platform/core/src/Bridge/Symfony/Routing/IriConverter.php** line 155".

Behind the scene it is an error from **symfony/routing/Generator/UrlGenerator.php line 193** : Parameter "id" for route "my_route_get_item" must match "[^/\.]++" ("iri.withdot" given) to generate a corresponding URL.

It seems to me that it should be allowed to have a dot in an IRI as it's not part of the reserved URI characters.

**How to reproduce**
Try to post a resource (Entity, DTO) with an id containing a dot.

**Possible Solution**
For POST operations : change in **api-platform/core/src/Bridge/Symfony/Routing/Router.php**, the `generate()` method for
```
public function generate($name, $parameters = [], $referenceType = self::ABS_PATH)
{
// Disable strict_requirements to allow dot in IRIs
$this->router->setOption('strict_requirements', false);
return $this->router->generate($name, $parameters, self::CONST_MAP[$referenceType]);
}
```
**Additional Context**
Allowing a dot in IRIs would lead to troubles with GET operations as an IRI like "a.b" would lead to the following error : **Format \"b\" is not supported**. Effectively, **b** would be considered to be the format. In this case, maybe it could be possible to specify the format
in a Accept header only.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.