api-platform / api-platform/core

Allow dot in IRI

未關閉
#8,003 2 則留言 14 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
PHP
星號
2.6k
分支
980
平均合併
2 天 4 小時
30 天內合併 PR
49

描述

**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.

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。