Phalcon 1.1 beta

в 10:35, , рубрики: framework, phalcon, php, разработка, метки: , ,

Phalcon 1.1 beta
После успешного релиза PHP-фреймворка Phalcon 1.0, команда разработчиков продолжает работать над его развитием. В этой статья я хочу осветить наиболее интересные фичи, представленные в версии 1.1.0 BETA


Пагинация в конструкторе запросов (QueryBuilder)

Ранее пагинатор был доступен лишь для вывода данных Модели и нативных массивов. Теперь пагинация может быть использована при выводе данных произвольного запроса через конструктор 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

Простой клиент для сервера очередей Beanstalkd теперь является частью фреймворка

// Соединение с сервером
$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

// Создаём экземпляр класса шифрования
$encryption = new PhalconCrypt();

$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 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);

Использование контроллеров в приложениях MvcMicro

Для лучшей организации структуры микро-приложения в новой версии 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, а так же почитать документацию к этой версии фреймворка.

Если вы до сих пор лично не опробовали производительность 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, который ввиду определённых причин не может его самостоятельно разместить.

Автор: boston

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js