BonBonSlick
@BonBonSlick
Vanilla Full Stack Web Architector

Как брать локали для роутов из БД?

https://symfony.com/doc/current/routing/service_co...

Однако, если админ может менять какие локали? К примеру если он добавит локаль новую?

# config/services.yaml
parameters:
    app.locales: en|es // а мои локали идет из БД
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
BoShurik
@BoShurik
Как сказал Minifets, через роутинг такое сделать сложно, проще через event_dispatcher:

class SiteController
{
    /**
     * @Route(path="/{_locale}/", name="index_locale")
     * @Route(path="/", name="index")
     */
    public function indexAction(Request $request)
    {
        return new Response($request->getLocale());
    }
}


namespace App\EventSubscriber;

use App\LocaleProvider;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\KernelEvents;

class LocaleSubscriber implements EventSubscriberInterface
{
    /**
     * @var LocaleProvider
     */
    private $localeProvider;

    public function __construct(LocaleProvider $localeProvider)
    {
        $this->localeProvider = $localeProvider;
    }

    /**
     * @inheritDoc
     */
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::REQUEST => 'onKernelRequest',
        ];
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        if (!$event->isMasterRequest()) {
            return;
        }

        $request = $event->getRequest();

        if (!in_array($request->getLocale(), $this->localeProvider->getLocales())) {
            throw new NotFoundHttpException(sprintf('Unknown locale %s', $request->getLocale()));
        }
    }
}


namespace App;

class LocaleProvider
{
    public function getLocales()
    {
        return ['ru', 'en'];
    }
}


P.S.: Может пригодиться: https://github.com/lunetics/LocaleBundle
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы