Прошёл почти год, RC был использован во многих проектах, было много изменений, была практически написана новая версия.
А именно:
Событийная модель была переписана с использованием лямбда ф-ий, также лямбды используются в классе кеширования, для которого теперь можно написать любой модуль, как для работы с файлами, так и с memcached и вообще чем угодно ...
Шаблоны выведены в отдельный класс.
Введена полная поддержка REST
Сорцы находятся здесь
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
)
);
HTML <?php echo 'php'; ?>
<? endif; CACHE::end(); ?>
$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'));
}
function($param) {
echo "The event has been triggered with param '$param'";
});
//...
events::trigger('event', 'xxx');
//...
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();
}
$routes['todo/<:num>']['?PUT'] = 'todos.edit';
$routes['todo']['?POST'] = 'todos.add';
$routes['todo/<:num>']['?DELETE'] = 'todos.del';
А именно:
Событийная модель была переписана с использованием лямбда ф-ий, также лямбды используются в классе кеширования, для которого теперь можно написать любой модуль, как для работы с файлами, так и с 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';