Вот принцип работы экшенов :
- Роутер парсит URL вида http://site.ru/action/event/param1/ и разделяет его на части, в переменной Router::$Action лежит сам экшен, в переменной Router::$Event лежит эвент, а в массиве Router::$Params лежат остальные значения полученные из url
- Системой проверяется , есть ли нужный экшен , если нет , то загружается экшен "ошибка"
- При загрузке экшена подгружается класс экшена, создаётся экземпляр класса, запускается функция $classname->_load(); , запускается нужный эвент (определённый метод класса)
- В саммом классе есть что-то примерно такое :
<?
class ActionName extends Action {
function _load () {
$this->SetDefaultEvent('main');
$this->AddEvent('top', 'top');
$this->AddEventPreg('[0-9]', 'full');
}
function main() {
echo 'Главная';
}
function full() {
echo 'Полная новость';
}
function top() {
echo 'Топ новостей';
}
}
Action::SetDefaultEvent('main'); мы установили дефолтный эвент(метод в классе) который запустится если значение Router::$Event будет пусто, или нужный метод будет не найден
Action::AddEvent('top', 'top'); мы установили , что когда Router::$Event будет = 'top', зупустится метод top
Action::AddEventPreg('[0-9]', 'full'); мы установили, что когда значение эвента будет соответствовать регулярному выражению, запустится метод full