Добрый вечер.
Помогите, пожалуйста, решить задачу.
Есть сущность Region, также есть embeddable класс Name.
/*
* @ORM\Entity
* @ORM\Table(name="location_regions")
*/
class Region
{
/**
* @var Id
* @ORM\Column(type="location_region_id")
* @ORM\Id
*/
private Id $id;
/**
* @var Name
* @ORM\Embedded(class="Name", columnPrefix=false)
*/
private Name $name;
/....../
public functon getName(): Name
{
return $this->name;
}
#############################################
/**
* @ORM\Embeddable()
*/
class Name
{
/**
* @var string
* @ORM\Column(type="string", unique=true)
*/
private string $name;
/**
* @var string
* @ORM\Column(type="string", unique=true, nullable=true)
* @Gedmo\Slug(fields={"name"})
*/
private string $slug;
public function __construct(string $name)
{
Assert::notEmpty($name);
$this->name = $name;
}
public function getValue(): string
{
return $this->name;
}
public function getSlug(): string
{
return $this->slug;
}
}
При создании нового региона slug автоматически записывается в базу.
При попытке перейти к просмотру отдельного региона получаю ошибку.
Unable to guess how to get a Doctrine instance from the request information for parameter "region".
Я понимаю, что doctrine не может понять, какую именно запись ей доставать из базы.
Действие в контроллере
/**
* @param Region $region
* @param RegionFetcher $fetcher
* @return Response
*
* @Route("/region/{slug}", name=".show")
* @ParamConverter("region", options={"mapping": {"slug": "slug"}})
*/
public function show(Region $region, RegionFetcher $fetcher): Response
{
$region = $fetcher->find($region->getId()->getValue());
return $this->render('app/admin/location/regions/show.html.twig', ['region' => $region]);
}
Ссылка для перехода с главной страницы
<a href="{{ path('location.regions.show', {'slug': region.slug}) }}">{{ region.name }}</a>
Как правильно в данном случае объяснить doctrine через аннотацию какую именно запись достать из базы?