PHPixie фреймворк для разработки веб-приложений на языке PHP

Компоненты PHPixie написаны так чтобы самым простым и быстрым способом справится с 90% рутинных задач при разработке сайтов, а оставшиеся 10% сложных более редких задач предполагается разработчик решит сам и незачем их включать в сам фреймворк.

Для установка PHPixie нам понадобится Composer - система управления пакетами для PHP. Установим глобально

# cd /usr/local/bin
# curl -s https://getcomposer.org/installer | php

Создадим проект с именем tutorial:

# composer.phar create-project phpixie/project tutorial 2.*-dev --prefer-dist

Обновим файлы проекта

$ cd tutorial
$ composer.phar update -o

Для тестирования минифреймверка PHPixie можно запустить встроенный в PHP HTTP сервер:

# cd tutorial/web/
$ php -S localhost:8000

http://localhost:8000/

Как работает PHPixie

В index.php куда и попадают все запросы самые важные строчки это:

$pixie = new \App\Pixie();
$pixie->bootstrap($root)->handle_http_request();

Класс App\Pixie который является сердцем фреймворка, его DI контейнером. Через него можно получить доступ ко всем другим компонентам. App\Pixie наследует от PHPixie\Pixie из библиотеки PHPixie-Core. Базовый проект оглашает этот класс вместо использования PHPixie\Pixie напрямую для предоставления разработчику возможности внести в него свои изменения (например подключить модуль).

Сразу стоит отметить что добавлять новые сущности в этот контейнер на ходу, как например в Silex, нельзя, все надо описывать явно в классе. Следует обратить внимание на то что это не синглтон и передавать его между классами приходится явно, такой подход был избран для избежания какого-либо глобального состояния в коде, аналогично фреймворк никогда не использует статические методы. Хотя это и может показаться не таким удобным на первый взгляд, но зато позволяет добиться лучшей читабельности кода, полностью документировать все сущности (так как все они становятся атрибутами класса) а также получить подсказки по этим сущностям в IDE. Поскольку PHPixie\Pixie содержит также все фактори методы, то это позволят нам с легкостью заменить любой класс фреймворка на свой путем перегрузки соответствующего метода. Каждый модуль, например db или orm поставляет свой класс с фактори методами, эти классы прописываются в нашем App\Pixie в $modules. Потом мы можем запрашивать их как проперти, например используя $pixie→db→query() и $pixie→orm→get(), что вносит дополнительную структурированность и позволяет избежать супа из методов.

Метод bootstrap() инициализирует $pixie, считывает конфигурацию, подключает обработку исключений и т.д. Как раз в handle_http_request() проходит обработка запроса. Этот процесс состоит из таких этапов:

  1. Создание объекта $request класса PHPixie\Request
  2. Этот объект передается в соответствующий контроллер и выполняется соответствующий action
  3. В процессе исполнения action контроллер изменяет объект $response ( PHPixie\Response ). Данные из $response (хедеры и контент) отсылаются пользователю

Все три самых важных объекта $request, $response и $pixie доступны как атрибуты класса PHPixie\Controller.

Добавление новой пользовательской функции PHPixie

Объект $pixie — это имплементация DI Контейнера и Сервис Локатора. Он доступен как проперти контроллера и передается практически в каждый конструктор, $pixie также содержит фактори методы для каждого класса фреймворка. Добавление методов и проперти в $pixie происходит только путем расширения класса. В базовом проекте уже присутствует класс App\Pixie который наследует от PHPixie\Pixie, как раз в него мы можем добавлять свой код чтобы иметь к нему доступ повсюду. Например добавим новые функции scripts и style которые будут создавать массивы файлов css и js, для дальнейшего вывода в HTML

classes/App/Pixie.php
<?php
 
namespace App;
 
class Pixie extends \PHPixie\Pixie {
 
    public $html;
    protected $modules = array(
        'db' => '\PHPixie\DB',
        'orm' => '\PHPixie\ORM'
    );
 
    protected function after_bootstrap() {
        // Whatever code you want to run after bootstrap is done.
    }
 
    public function style($filecss) {
 
        $tmp = array();
        foreach ($filecss as $value) {
            $tmp[] = '<link rel="stylesheet" href="' . $value . '" />';
        }
        return $tmp;
    }
 
    public function scripts($filejs) {
 
        $tmp = array();
        foreach ($filejs as $value) {
            $tmp[] = '<script type="text/javascript" src="' . $value . '"></script>';
        }
        return $tmp;
    }
 
}

Читайте также: MVC (Model-View-Controller)

PQ VPS сервера в 28+ странах.