среда, 31 октября 2012 г.

Изменения и Дополнения

Прошёл почти год, RC был использован во многих проектах, было много изменений, была практически написана новая версия.
А именно:
Событийная модель  была переписана с использованием лямбда ф-ий, также лямбды используются в классе кеширования, для которого теперь можно написать любой модуль, как для работы с файлами, так и с memcached и вообще чем угодно ...
Шаблоны выведены в отдельный класс.
Введена полная поддержка REST

Сорцы находятся здесь

CACHE

Инициализация и настройка

CACHE::init('frontend');
CACHE::$enabled = true;

/* rc/config/cache.php */
$cache = array(
    'modules' => array(
      'frontend' => array(
        'enabled' => false,
        'adapter' => 'Files'
      )
    ),

'classes' => array(
    '1min' => 60,
    '5min' => 300,
    '10min' => 600,
    '30min' => 1800,
    '1h' => 3600,
    '2h' => 7200,
    '6h' => 3600*6,
    '12h' => 3600*12,
    '24h' => 3600*24
    )
);

В шаблоне

<? if(CACHE::start('cache for 24 hours, '24h')): ?>
      HTML <?php  echo 'php';  ?>
<? endif; CACHE::end(); ?>

В моделях и контроллерах

$fff = function () use ($id, $place_id) {
    $e = new events();
    $p = new places();
    $event_item = $e->get($id, url::$lang);
    $event_item['place'] = $p->get($place_id, url::$lang);
    return $event_item;
};


$event_item = CACHE::process("EVENTS-show $place_id $id", '30min', $fff);

Пример использования шаблонов


function register($params) {
    $tparams = array();
    if(isset($_POST['email'])) {
      $data = array('email' => $_POST['email'], 'pass' =>  md5($_POST['pass']));
      if($user_id = USER::register($data)) {
        USER::force_login($user_id);
        redirect::go ('/'.USER::get_field('email'));
      }
      else {
        $tparams['err'] = 'Internal error';
      }
    }
    VIEW::template('register', $tparams, 'content');
    VIEW::display('main', array('method' => 'register'));

}

Event manager

events::on('event',
    function($param) {
      echo "The event has been triggered with param '$param'";
    });
//...
events::trigger('event', 'xxx');

USER class

USER::init(new userAdapterDB(new users()));
//...
if($user_id = USER::register($data)) {
    USER::force_login($user_id);
    redirect::go ('/'.USER::get_field('email'));
}

if(USER::login($_POST['email'], $_POST['pass']))
    redirect::go ('/'.USER::get_field('email'));

$user_id = USER::get_pk();

/*   rc/lib/USER/adapters/DB.php   */

public function login($email, $password) {
  //...
}

public function register($data) {
    $this->user_model->insert($data);
    return $this->user_model->get_last_id();
}

REST

$routes['todo/<:num>']['?GET'] = 'todos.get_item';
$routes['todo/<:num>']['?PUT'] = 'todos.edit';
$routes['todo']['?POST'] = 'todos.add';
$routes['todo/<:num>']['?DELETE'] = 'todos.del';