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')
найти подходящую статью для этой страницы