Yii - динамическая загрузка контроллера

У меня была хорошая игра с Yii Framework, и теперь я хочу немного углубиться в это, и я хочу настроить приложение, в котором несколько разных URL-адресов будут указывать на один и тот же контроллер.

Обычно domain.com/content будет указывать на класс ContentController, который является стандартным в MVC.

То, что я хочу сделать, это настроить три контроллера (может быть, больше, но это будет делать для запуска), то есть ArticlesController, DisplayController и SplashController.

Затем я настроил бы то, что по сути является CMS для клиента, и они могли бы создавать столько страниц, сколько они хотят, и указывать их на три вышеуказанных контроллера, которые я уже настроил для обработки данных.

Так, например, мой клиент мог настроить следующие страницы: новости, уведомления, технические и сделать так, чтобы все они указывали на ArticlesController, а также настроить страницы: управление, специальные предложения, поддержку и сделать так, чтобы все они указывали на DisplayController.

Я знаю, что все эти контроллеры могут быть созданы с использованием модуля Gii, но в этом случае это не вариант, так как я не думаю, что это подходит для не технических специалистов.

Я просто хочу, чтобы мой клиент мог войти в CMS, решить, что он хочет создать новую страницу под названием "randompage", указать ее на ArticlesController с помощью выпадающего меню, затем написать для нее кучу статей и теперь иметь те статьи, доступные по адресу domain.com/randompage/article-1 domain.com/randompage/article-2

Со стандартной настройкой, которая будет указывать на сайт / ошибку, потому что нет контроллера RandompageController

Пока что я создал конструктор класса Controller, где я могу перезаписать идентификатор контроллера.

class Controller extends CController {
    function __construct($id) {
        // Code here which successfully pulls from the database
        // which controller the current page should point to.
        parent::__construct($newControllerID)
    }
}

Если я проверяю класс CController, $this->_id = article, display или splash, но само приложение по-прежнему загружает сайт / ошибку

Я предполагаю, что мне нужно установить / переопределить контроллер в другом месте. я пытался

Yii::app()->setController($newControllerID)

но это не имеет никакого эффекта

Возможно, Yii настроен и должен требовать определенного контроллера для каждого URL, но это будет означать разработку довольно жестких решений для клиентов и требование от них вызывать разработчика каждый раз, когда они захотят добавить новый контроллер.

Надеюсь, я объяснил, что я пытаюсь сделать хорошо.

1 ответ

  • создать объект страницы (id, title, slug, description, image)
  • создать объект статьи (id, pageId, title, slug, content)

настройте свой urlManager:

'<pageSlug>/<articleSlug>' => 'article/view'

в вашем ArticleController->ViewAction оцените

  • Yii:: приложение ()->request-> GetParam ('pageSlug')
  • Yii:: приложение ()->request-> GetParam('articleSlug')

найти подходящую статью для этой страницы

Другие вопросы по тегам