Skip to content

Контроллеры

Butschster edited this page Jun 2, 2015 · 3 revisions

Контроллеры

В основе KodiCMS лежит иерархическая структура контроллеров на которых основана работа всех разделов:

|- Illuminate\Routing\Controller
|
|----- KodiCMS\CMS\Http\Controllers\System\Controller
|
|--------- KodiCMS\CMS\Http\Controllers\System\TemplateController
|
|------------------ KodiCMS\CMS\Http\Controllers\System\FrontendController
|			
|--------------------------- KodiCMS\Users\Http\Controllers\Auth\AuthController
|				
|--------------------------- KodiCMS\Users\Http\Controllers\Auth\PasswordController
|
|------------------ KodiCMS\CMS\Http\Controllers\System\BackendController
|
|--------------------------- KodiCMS\Dashboard\Http\Controllers\DashboardController
|			
|--------------------------- ...
|
|--------- KodiCMS\CMS\Http\Controllers\System\VirtualMediaLinksController
|
|--------- KodiCMS\Pages\Http\Controllers\System\FrontPageController
|		
|------------------ KodiCMS\Pages\Http\Controllers\FrontendController
|
|--------- KodiCMS\API\Http\Controllers\System\Controller

KodiCMS\CMS\Http\Controllers\System\Controller

Базовый контроллер, в котором реализована авторизация и проверка прав доступа, от которого наследуются все остальные контроллеры

Параметры

  • -request - Request
  • -response - Response
  • -session - Session
  • -currentUser - \KodiCMS\Users\Model\User
  • -authRequired - Указывает нужна ли для доступа к контроллеру авторизация
  • -allowedActions - Список экшенов, которые доступны без проверки прав доступа модулем ACL
  • -permissions - Список ['action' => 'permission.name'] прав доступа к экшену контроллера

Методы:

  • boot() - запускается в момент инициализации контроллера (Можно внедрять зависимости)
  • before() - запускается до вызова экшена (мигрировал из Kohana)
  • after() - запускается непосредственно после вызова экшена (мигрировал из Kohana)
  • smartRedirect() - умный редирект, который поможет быстро перенаправить пользователя с экшена getCreate на getEdit или getIndex со страницы создания записи, а также в на именованные роуты и экшены.

KodiCMS\CMS\Http\Controllers\System\TemplateController

В контроллере реализована работа с шаблонами сайта и подключение JS кода

Параметры

  • +template - путь до базового шаблона контроллера
  • +moduleNamespace - неймспейс для view шаблонов устанавливаемых через метод setContent(...)
  • +autoRender - после вызова экшена автоматический вывод шаблона
  • +onlyContent - выводить только контенте без базового шаблона
  • +templateScripts - параметры, которые будут выведены в блоке <script> в head страницы в json формате

Методы:

  • setLayout($name) - установка базового шаблона
  • setTitle($title, $url) - установка заголовка и хлебной крошки текущей страницы
  • setContent($view, array $data = []) - установка шаблона контента и передача необходимых параметров
  • includeMergedMediaFile($key, $file) - поиск в модулях JS файла по имени, слияние в один скрипт и подключение после загрузки JS библиотек
  • includeModuleMediaFile($filename) - подключение JS файла по виртуальному пути из модулей относительно директории resources/js

Глобальные параметры доступные во всех шаблонах

  • adminDir
  • controllerAction
  • currentUser

KodiCMS\CMS\Http\Controllers\System\BackendController

Используется для работы с админ панелью сайта

Параметры

  • +navigation - Navigation
  • +breadcrumbs - Breadcrumbs

Глобальные параметры доступные во всех шаблонах

  • currentPage

При загрузке контроллера происходит поиск JS файла контроллера с названием текущего контроллера во всех модулях.


KodiCMS\CMS\Http\Controllers\System\FrontendController

Используется для страниц для которых не нужна авторизация


KodiCMS\CMS\Http\Controllers\System\VirtualMediaLinksController

Используется для поиска в модулях media файлов в папке resources - 'cms/{file}.{ext}'


KodiCMS\Pages\Http\Controllers\System\FrontPageController

Может быть использован для создания Fronend страницы с подключением на нее виджетов

Route::get('page/test', ['uses' => 'TestController@getIndex']);

------

use KodiCMS\Widgets\Widget\HTML;
use KodiCMS\Pages\Widget\PageMenu;
use KodiCMS\Pages\Http\Controllers\System\FrontPageController;

class TestController extends FrontPageController
{
	public function getIndex()
	{
		$layout = $this->getLayoutFile('normal.blade');

		$menu = new PageMenu('menu');

		$html = new HTML('test');
		$html->header = 'content.blade';
		$html->setFrontendTemplate('content.blade');

		$footer = new HTML('footer');

		$this->widgetCollection->addWidget($menu, 'header', 100);
		$this->widgetCollection->addWidget($html, 'header');
		$this->widgetCollection->addWidget($footer, 'footer');

		return $this->render($layout);
	}
}

KodiCMS\Pages\Http\Controllers\FrontendController

Загрузка frontend страниц, если не сработал ни один системный маршрут (route)


Создание контроллера через консоль

cms:make:controller ControllerName --module=modulename - создаст новый пустой Backend контроллер в папке указанного модуля (название модуля можно указывать в любом регистре), если модуль не существует, то команда вернет ошубку. Для создания API контроллера необходимо указать параметр --type=api