четверг, 5 января 2012 г.

Дополнения

Событийная Модель
Всё это добро я назвал EventManager, реализует паттерн observer и позволяетсоздавать события в разных местах фр., но в тоже время обрабатывать их (события) в одном определённом месте - папка protected/events. В этой папке находятся обозреватели (observers), они загружаются автоматически (средствами PHP). Каждый класс обозревателя имеет суффикс Observer (например testObserver), каждый такой класс наследуется от класса Observer . Название метода совпадает с названием события.

Запуск события осуществляется ф-ей:
function trigger_event($slot, $event, &$params)
$slot - слот событий
$event - название события
$params - параметры, передаваемые ссылкой

Например, если сработало событие trigger_event('test', "test_event", $params); , тогда в папке protected/events в файле test.php в классе class testObserver сработает метод test_event .

class testObserver extends Observer {
    public function test_event(&$params) {
      //....     
      $params['1'] = 'New param value';
    }
}

Это был обозреватель по умолчанию, также можно назначить сколько угодно пользовательских обозревателей (унаследованных от customObserver), при этом нужно соблюдать 2 условия:
1)Избегать конфликта имён классов
2)Обозреватель должен быть создан до срабатывания события

class test_observer extends customObserver {
  public function test_event(&$params) {
    print "Inside custom observer";
    $params['x'] = '
New param value';
  }
}
CACHE
Написал небольшой, простенький модуль для кеширования
cache::start(); - начать кеширование
public static function start($time = 10, $name = '')
  $time - промежуток кеширования (секунды)
  $name - название файла для кеша (по умолчанию - хеш из URL)
cache::end(); - закончить кеширование
Запускается всё это дело из frontController
Файлы хранятся в папке protected/cache

Ещё один вариант использования класса cache:

//Проверяем, закеширован ли 'translate',
//а также возраст кеша - меньше часа
if(cache::cache_exists_time('translate', 3600)) {
    //Загружаем
    $translate = cache::cache_load('translate');
}
else {

    //Загружаем данные в переменную $translate обычным способом
    //...

    //Сохраняем кеш
    cache::cache_save('translate', $translate);
}

Комментариев нет:

Отправить комментарий