Вы можете использовать аннотацию UniqueEntity
для проверки слаг на уникальность.
Например, в вашей сущности добавьте аннотацию UniqueEntity
с полем slug
.
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @UniqueEntity("slug")
*/
class Page
{
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Assert\NotBlank
*/
private $slug;
public function __construct(string $slug)
{
$this->slug = $slug;
}
}
Затем вы можете создать какой-либо сервис или выполнить проверку в вашем контроллере.
/**
* @Route("/{slug}")
*/
public function show($slug, ValidatorInterface $validator)
{
$page = new Page($slug);
$errors = $validator->validate($author);
if (count($errors) > 0) {
// handle errors
}
// save entity
}
Обновление:
Для проверки уже существующих маршрутов, вероятно, вы можете сделать что-то вроде этого
public function isRouteExist(string $slug): bool
{
/** @var Symfony\Component\Routing\RouterInterface $router */
$routes = array_filter(array_map(function (\Symfony\Component\Routing\Route $route) {
if (!$route->compile()->getVariables()) {
return $route->getPath();
}
return null;
}, $router->getRouteCollection()->all()));
return in_array(sprintf('/%s', $slug), $routes, true);
}