Инструменты пользователя

Инструменты сайта


phpixie

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

phpixie [2019/04/14 11:07]
phpixie [2020/06/13 13:46] (текущий)
Строка 1: Строка 1:
 +====== PHPixie ======
  
 +{{ ::phpixie_01.png?nolink |}}
 +Homepage: [[https://phpixie.com/|PHPixie]]
 +
 +Компоненты PHPixie написаны так чтобы самым простым и быстрым способом справится с 90% рутинных задач при разработке сайтов, а оставшиеся 10% сложных более редких задач предполагается разработчик решит сам и незачем их включать в сам фреймворк.
 +
 +Для установка PHPixie нам понадобится [[Composer]] - система управления пакетами для PHP. Установим глобально <file>
 +# cd /usr/local/bin
 +# curl -s https://getcomposer.org/installer | php
 +</file>
 +
 +Создадим проект с именем tutorial:<file>
 +# composer.phar create-project phpixie/project tutorial 2.*-dev --prefer-dist
 +</file>Обновим файлы проекта<file>
 +$ cd tutorial
 +$ composer.phar update -o
 +</file>
 +Для тестирования минифреймверка PHPixie можно запустить встроенный в PHP HTTP сервер:<file>
 +# cd tutorial/web/
 +$ php -S localhost:8000
 +</file> [[http://localhost:8000/]]
 +
 +====== Как работает PHPixie ======
 +  * [[http://habrahabr.ru/post/194470/|Как работает PHPixie — Жизнь одного запроса, контейнер и парадигма]]
 +
 +В index.php куда и попадают все запросы самые важные строчки это:<file>
 +$pixie = new \App\Pixie();
 +$pixie->bootstrap($root)->handle_http_request();
 +</file> Класс 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 класса PHPixie\Request
 +  - Этот объект передается в соответствующий контроллер и выполняется соответствующий action
 +  - В процессе исполнения action контроллер изменяет объект $response ( PHPixie\Response ). Данные из $response (хедеры и контент) отсылаются пользователю
 +
 +Все три самых важных объекта $request, $response и $pixie доступны как атрибуты класса PHPixie\Controller.
 +
 +====== Добавление новой пользовательской функции PHPixie ======
 +
 +
 +Объект $pixie — это имплементация DI Контейнера и Сервис Локатора. Он доступен как проперти контроллера и передается практически в каждый конструктор, $pixie также содержит фактори методы для каждого класса фреймворка. Добавление методов и проперти в $pixie происходит только путем расширения класса. В базовом проекте уже присутствует класс App\Pixie который наследует от PHPixie\Pixie, как раз в него мы можем добавлять свой код чтобы иметь к нему доступ повсюду. Например добавим новые функции scripts и style которые будут создавать массивы файлов css и js, для дальнейшего вывода в HTML<file php 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;
 +    }
 +
 +}</file>
 +====== Ссылки ======
 +  * [[MVC]] (Model-View-Controller)
 +  * [[http://habrahabr.ru/post/178899/|Создаем видеобиблиотеку с PHPixie]]
 +  * [[http://habrahabr.ru/post/244113/|PHPixie Amalgama — Интернационализация в PHPixie ]]