dev-master
9999999-dev http://cmsx.ruCMSx Controller component
MIT
The Requires
- php >=5.3.0
- cmsx/page dev-master
- cmsx/url dev-master
by Igor Osharin
CMSx Controller component
Чтобы адресация контроллеров и обработка ошибок работала, необходимо организовать единую точку входа в приложение., (*1)
$r = new \CMSx\Router; //Создаем объект Router $r->setControllersPath('/path/to/controllers/'); //Указываем путь к папке с контроллерами $r->process(); //Включаем обработку запросов
При разработке приложения, полезно видеть дополнительную информацию об ошибках и подробности возникновения Exception'ов. Для этого предусмотрен режим отладки, включаемый с помощью enableDebug($on = true)
. В режиме отладки расширенная информация об Exception'е указывается в тексте страницы ошибки., (*2)
Если нужно реализовать свой дизайн для страниц ошибок, можно отнаследоваваться от класса Page
, и переопределить метод Router'a getErrorPage()
, чтобы он возвращал нужный объект. При возникновении ошибки, к объекту Page
добавляется свойство 'exception'
, содержащее объект выброшенного исключения., (*3)
В системе установлены соглашения на именование контроллеров и действий (action).
По-умолчанию, для главной страницы вызывается defaultController->indexAction()
., (*4)
Если указан один аргумент /some/
, при наличии контроллера someController
в нем будет вызван indexAction()
. Если такого контроллера нет, система попытается вызвать defaultController->someAction()
, (*5)
Для URL /some/work/
будет предпринята попытка вызвать someController->workAction()
., (*6)
Если по первому аргументу контроллер не будет найден, система попробует вызвать defaultController->someAction()
. Если и это не получится, будет возвращена 404 ошибка., (*7)
Если контроллер найден, но такого метода не существует, система также выдаст ошибку. Чтобы обрабатывать динамические адреса, в контроллере можно реализовать функцию __call()
, внутри которой определять логику работы с данным адресом., (*8)
Если контроллер наследует базовый класс CMSx\Controller
, в нем доступны свойства:
* $this->url
- Объект URL содержащий текущий адрес;
* $this->controller
- имя контроллера, без суффикса "Controller";
* $this->action
- имя действия, без суффикса "Action"., (*9)
Для стандартных ошибок предусмотрены методы, выбрасывающие CMSx\Controller\Exception:
* NotFound($msg = null)
- Страница не найдена;
* Unauthorized($msg = null)
- Доступ без авторизации запрещен;
* Forbidden($msg = null)
- Доступ запрещен;
* Unavailable($msg = null)
- Сервис недоступен;
* ServerError($msg = null)
- Ошибка сервера;, (*10)
$msg
- может быть указано произвольное уточняющее сообщение, которое отображается только при включенном режиме отладки, см.секцию Роутинг., (*11)
Для перенаправления пользователя предусмотрены методы:
* Redirect($url, $permanent = false)
- перенаправление на заданный $url.
* Back()
- возврат на адрес, откуда пользователь пришел на страницу.
Оба метода также выбрасывают CMSx\Controller\Exception, обрабатываемый на уровне Router`a., (*12)
Контроллер после выполнения должен вернуть строку, число или объект, который можно привести к строке (реализован метод __toString()
). Если контроллер вернул null
или false
, ничего выведено не будет., (*13)
В рамках CMSx Framework контроллер обычно возвращает объект Page или Template., (*14)
CMSx Controller component
MIT