После успешного релиза PHP-фреймворка Phalcon 1.0, команда разработчиков продолжает работать над его развитием. В этой статья я хочу осветить наиболее интересные фичи, представленные в версии 1.1.0 BETA
- Пагинация результатов конструктора запросов (QueryBuilder)
- Сервер очередей Beanstalkd
- Шифрование
- Assets Management
- Режим Exception для ORM-валидаторов
- Роутинг по имени хоста
- Использование контроллеров в приложениях Mvc\Micro
- Послесловие
- Помогите сообществу, проголосовав за поддержку Phalcon в cPanel
Пагинация в конструкторе запросов (QueryBuilder)
Ранее пагинатор был доступен лишь для вывода данных Модели и нативных массивов. Теперь пагинация может быть использована при выводе данных произвольного запроса через конструктор QueryBuilder, который использует SQL операторы LIMIT/OFFSET. Он будет полезен для вывода больших наборов данных.
use Phalcon\Paginator\Adapter\QueryBuilder; $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
Простой клиент для сервера очередей Beanstalkd теперь является частью фреймворка
// Соединение с сервером $queue = new Phalcon\Queue\Beanstalk(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
// Создаём экземпляр класса шифрования $encryption = new Phalcon\Crypt(); $key = 'le password'; $text = 'This is a secret text'; $encrypted = $encryption->encrypt($text, $key); echo $encryption->decrypt($encrypted, $key);
Assets Management
С помощью этого компонента можно с лёгкостью управлять статичными ресурсами, такими как 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>
Режим Exception для ORM-валидаторов
При валидации данных, в процессе создания/обновления записи БД, методы save()/create()/update() возвращают булево значение, т.е. FALSE, если один из параметров не прошёл валидацию. Теперь это поведение можно изменить и выбрасывать исключение:
use Phalcon\Mvc\Model\ValidationFailed; try { $robot = new Robots(); $robot->name = 'Bender'; $robot->save(); } catch (ValidationFailed $e) { echo 'Reason: ', $e->getMessage(); }
Роутинг по имени хоста
В правилах роутинга теперь можно указать имя хоста
$router = new Phalcon\Mvc\Router(); $router->addGet('/api/robots', array( 'module' => 'api', 'controller' => 'robots', 'action' => 'index' ))->setHostName('api.phalconphp.com');
Так же можно использовать группу маршрутов
$group = new Phalcon\Mvc\Router(); $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);
Использование контроллеров в приложениях Mvc\Micro
Для лучшей организации структуры микро-приложения в новой версии Phalcon, в качестве обработчика запроса можно указывать контроллеры (ранее можно было использовать только callable значения).
$collection = new Phalcon\Mvc\Micro\Collection(); // Немедленная инициализация $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, а так же почитать документацию к этой версии фреймворка.
Если вы до сих пор лично не опробовали производительность Phalcon, вы можете установить его прямо сейчас
git clone http://github.com/phalcon/cphalcon cd build git checkout 1.1.0 sudo ./install
а пользователям Windows достаточно установить DLL со страницы загрузки.
Разработчики приглашают обсудить этот релиз на форуме (который, кстати, так же написан на Phalcon) и Stack Overflow.
Если же вы отловите баг, Github с удовольствием примет pull-реквест или failing-тест.
Помогите сообществу, проголосовав за поддержку Phalcon в cPanel
Разработчики Phalcon предлагают добавить поддержку фреймворка в панель управления веб-хостингом cPanel.
Если Phalcon станет доступным расширением для клиентов cPanel, то это не только увеличит популярность фреймворка, но и пойдёт на пользу разработчикам, хостинговым компаниям, а в последствии и конечным пользователям, ведь Phalcon написан на C, а значит потребляет меньше памяти и создаёт меньшую нагрузку на сервер в сравнении с аналогами написанными на PHP.
Поддержать развитие фреймворка вы можете проголосовав за feature-реквест на сайте cPanel:
http://features.cpanel.net/responses/add-support-for-phalconphp-extension-apache-php
Источники:
P.S. Текст переведён и подготовлен силами agent_j, который ввиду определённых причин не может его самостоятельно разместить.
ссылка на оригинал статьи http://habrahabr.ru/post/177691/
Добавить комментарий