Компоненты 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
В 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() проходит обработка запроса. Этот процесс состоит из таких этапов:
Все три самых важных объекта $request, $response и $pixie доступны как атрибуты класса PHPixie\Controller.
Объект $pixie — это имплементация DI Контейнера и Сервис Локатора. Он доступен как проперти контроллера и передается практически в каждый конструктор, $pixie также содержит фактори методы для каждого класса фреймворка. Добавление методов и проперти в $pixie происходит только путем расширения класса. В базовом проекте уже присутствует класс App\Pixie который наследует от PHPixie\Pixie, как раз в него мы можем добавлять свой код чтобы иметь к нему доступ повсюду. Например добавим новые функции scripts и style которые будут создавать массивы файлов css и js, для дальнейшего вывода в HTML
<?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)