@antonowano
Профессиональный самоучка

Как получить маршруты из БД?

В проекте есть таблица categories она содержит всю структуру сайта с ссылками (в поле alias) и метаданными. В поле action указан вызываемый контроллер.
Как мне подгрузить все маршруты из этой таблицы?
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
@antonowano Автор вопроса
Профессиональный самоучка
Сделал так:
в app/config/routing.yml
# It must be the last
category:
    path:       "/{alias}"
    defaults:  { _controller: "AppBundle:Default:category" }
    requirements:
        alias:  "[a-z_-]+(\/[a-z_-]+)*"


в DefaultController:
/**
     * @ParamConverter("category", class="AppBundle:Category")
     */
    public function categoryAction(Category $category, Request $request)
    {
        $id = $request->query->getInt('id');
        if (null == $id) {
            return $this->run('index', $category, $request); // indexAction
        } else {
            return $this->run('details', $category, $id); // detailsAction
        }
    }

    private function run($actionName, $category)
    {
        $params = func_get_args();
        array_shift($params);
        $namespace = "\\AppBundle\\Controller\\". $category->getController() . 'Controller';
        $actionName .= 'Action';
        /** @var Controller $controller */
        $controller = new $namespace();
        $controller->setContainer($this->container);
        return call_user_func_array(array($controller, $actionName), $params);
    }


В БД указываю только имя контроллера. $category->getController() как раз его возвращает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maninhat
Посмотрите в сторону symfony.com/doc/current/cmf/bundles/routing/introd.... Бандл позволяет подключать свой роутер, который может брать данные откуда угодно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы