- PVSM.RU - https://www.pvsm.ru -
После успешного релиза PHP-фреймворка Phalcon 1.0 [1], команда разработчиков продолжает работать над его развитием. В этой статья я хочу осветить наиболее интересные фичи, представленные в версии 1.1.0 BETA
Ранее пагинатор был доступен лишь для вывода данных Модели и нативных массивов. Теперь пагинация может быть использована при выводе данных произвольного запроса через конструктор QueryBuilder, который использует SQL операторы LIMIT/OFFSET. Он будет полезен для вывода больших наборов данных.
use PhalconPaginatorAdapterQueryBuilder;
$builder = $this->modelsManager->createBuilder()
->columns('id, name')
->from('Robots')
->orderBy('name');
$paginator = new Paginator(array(
"builder" => $builder,
"limit" => 10,
"page" => 1
));
$page = $paginator->getPaginate();
Простой клиент для сервера очередей Beanstalkd [11] теперь является частью фреймворка
// Соединение с сервером
$queue = new PhalconQueueBeanstalk(array(
'host' => '192.168.0.21'
));
// Добавить задачу в очередь (простая запись)
$queue->put(array('proccessVideo' => 4871));
// Добавить задачу в очередь (с параметрами)
$queue->put(
array('proccessVideo' => 4871),
array('priority' => 250, 'delay' => 10, 'ttr' => 3600)
);
while (($job = $queue->peekReady()) !== false)
{
$message = $job->getBody();
var_dump($message);
$job->delete();
}
В эту версию Phalcon добавлен класс шифрования основанный на PHP библиотеке mcrypt [12]
// Создаём экземпляр класса шифрования
$encryption = new PhalconCrypt();
$key = 'le password';
$text = 'This is a secret text';
$encrypted = $encryption->encrypt($text, $key);
echo $encryption->decrypt($encrypted, $key);
С помощью этого компонента можно с лёгкостью управлять статичными ресурсами, такими как CSS и Javascript
// Сначала в контроллере добавим немного CSS
$this->assets
->addCss('css/style.css')
->addCss('css/index.css');
// и чуть-чуть js-скриптов
$this->assets
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
а затем покажем их в шаблоне
<html>
<head>
<title>Some amazing website</title>
<?php $this->assets->outputCss() ?>
</head>
<body>
<!-- ... -->
<?php $this->assets->outputJs() ?>
</body>
</html>
При валидации данных, в процессе создания/обновления записи БД, методы save()/create()/update() возвращают булево значение, т.е. FALSE, если один из параметров не прошёл валидацию. Теперь это поведение можно изменить и выбрасывать исключение:
use PhalconMvcModelValidationFailed;
try {
$robot = new Robots();
$robot->name = 'Bender';
$robot->save();
} catch (ValidationFailed $e) {
echo 'Reason: ', $e->getMessage();
}
В правилах роутинга теперь можно указать имя хоста
$router = new PhalconMvcRouter();
$router->addGet('/api/robots', array(
'module' => 'api',
'controller' => 'robots',
'action' => 'index'
))->setHostName('api.phalconphp.com');
Так же можно использовать группу маршрутов
$group = new PhalconMvcRouter();
$group->setHostName('api.phalconphp.com');
$groop->addGet('/api/robots', array(
'module' => 'api',
'controller' => 'robots',
'action' => 'index'
));
$groop->addGet('/api/robots/{id}', array(
'module' => 'api',
'controller' => 'robots',
'action' => 'show'
));
$router->mount($group);
Для лучшей организации структуры микро-приложения в новой версии Phalcon, в качестве обработчика запроса можно указывать контроллеры (ранее можно было использовать только callable значения).
$collection = new PhalconMvcMicroCollection();
// Немедленная инициализация
$collection
->setPrefix('/posts');
->setHandler(new PostsController());
// Ленивая инициализация
$collection
->setPrefix('/posts');
->setHandler('PostsController', true);
$collection->get('/', 'index');
$collection->get('/edit/{id}', 'edit');
$collection->delete('/delete/{id}', 'delete');
$app->mount($collection);
Phalcon 1.1.0 включает и другие изменения и баг-фиксы. Полный список изменений можно посмотреть в CHANGELOG [13], а так же почитать документацию [14] к этой версии фреймворка.
Если вы до сих пор лично не опробовали производительность Phalcon, вы можете установить его прямо сейчас
git clone http://github.com/phalcon/cphalcon
cd build
git checkout 1.1.0
sudo ./install
а пользователям Windows достаточно установить DLL со страницы загрузки [15].
Разработчики приглашают обсудить этот релиз на форуме [16] (который, кстати, так же написан на Phalcon) и Stack Overflow [17].
Если же вы отловите баг, Github [18] с удовольствием примет pull-реквест или failing-тест.
Разработчики Phalcon предлагают добавить поддержку фреймворка в панель управления веб-хостингом cPanel [19].
Если Phalcon станет доступным расширением для клиентов cPanel, то это не только увеличит популярность фреймворка, но и пойдёт на пользу разработчикам, хостинговым компаниям, а в последствии и конечным пользователям, ведь Phalcon написан на C, а значит потребляет меньше памяти и создаёт меньшую нагрузку на сервер в сравнении с аналогами написанными на PHP.
Поддержать развитие фреймворка вы можете проголосовав за feature-реквест на сайте cPanel:
http://features.cpanel.net/responses/add-support-for-phalconphp-extension-apache-php [20]
P.S. Текст переведён и подготовлен силами agent_j [23], который ввиду определённых причин не может его самостоятельно разместить.
Автор: boston
Источник [24]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/32820
Ссылки в тексте:
[1] Phalcon 1.0: http://habrahabr.ru/post/171915/
[2] Пагинация результатов конструктора запросов (QueryBuilder): http://habrahabr.ru/post/177691/#chapter1
[3] Сервер очередей Beanstalkd: http://habrahabr.ru/post/177691/#chapter2
[4] Шифрование: http://habrahabr.ru/post/177691/#chapter3
[5] Assets Management: http://habrahabr.ru/post/177691/#chapter4
[6] Режим Exception для ORM-валидаторов: http://habrahabr.ru/post/177691/#chapter5
[7] Роутинг по имени хоста: http://habrahabr.ru/post/177691/#chapter6
[8] Использование контроллеров в приложениях MvcMicro: http://habrahabr.ru/post/177691/#chapter7
[9] Послесловие: http://habrahabr.ru/post/177691/#chapter8
[10] Помогите сообществу, проголосовав за поддержку Phalcon в cPanel: http://habrahabr.ru/post/177691/#chapter9
[11] Beanstalkd: http://kr.github.io/beanstalkd/
[12] mcrypt: http://php.net/manual/en/book.mcrypt.php
[13] CHANGELOG: https://github.com/phalcon/cphalcon/blob/1.1.0/CHANGELOG
[14] документацию: http://docs.phalconphp.com/en/1.1.0/
[15] страницы загрузки: http://phalconphp.com/download
[16] форуме: http://forum.phalconphp.com/
[17] Stack Overflow: http://stackoverflow.com/questions/tagged/phalcon
[18] Github: http://github.com/phalcon/cphalcon/
[19] cPanel: http://cpanel.net/
[20] http://features.cpanel.net/responses/add-support-for-phalconphp-extension-apache-php: http://features.cpanel.net/responses/add-support-for-phalconphp-extension-apache-php
[21] Phalcon 1.1 beta released!: http://blog.phalconphp.com/post/48089073098/phalcon-1-1-beta-released
[22] Help the community to make Phalcon available on cPanel: http://blog.phalconphp.com/post/48284679009/help-the-community-to-make-phalcon-available-on-cpanel
[23] agent_j: http://habrahabr.ru/users/agent_j/
[24] Источник: http://habrahabr.ru/post/177691/
Нажмите здесь для печати.