PHPackages                             pinahq/framework - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. pinahq/framework

ActiveLibrary[Framework](/categories/framework)

pinahq/framework
================

The Pina2 Framework.

v2.0.0(4mo ago)54.3k—0%1[2 issues](https://github.com/pinahq/framework/issues)MITPHPPHP &gt;=7.4CI failing

Since Apr 4Pushed 2mo ago2 watchersCompare

[ Source](https://github.com/pinahq/framework)[ Packagist](https://packagist.org/packages/pinahq/framework)[ Docs](https://github.com/pinahq/framework)[ RSS](/packages/pinahq-framework/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (7)Versions (139)Used By (0)

Pina Framework
==============

[](#pina-framework)

Введение
--------

[](#введение)

Pina Framework - PHP фреймворк для разработки RESTfull, stateless приложений, со встроенной поддержкой очередей (gearman) и асинхронной обработкой событий. На уровне работы с БД Pina поддерживает автоматическую генерацию структуры таблиц и триггеров на основании классов модели (как альтернативу миграциям).

### Наша стратегия

[](#наша-стратегия)

Придерживаться стандартов PSR, схожего с Laravel именования методов и классов там, где это принципиально не влияет на производительность и идеологию фреймворка.

### Наша идеология

[](#наша-идеология)

Способствовать разработке производительных асинхронных RESTfull и stateless приложений на PHP.

Основывается на нескольких принципиальных позициях:

- Структура БД и триггеры - должны храниться в кодовой базе проекта вместе с другой бизнес логикой и генерироваться автоматически.
- Основа роутинга - однозначное отображение RESTfull ресурсов “коллекция/элемент/коллекция…” на контроллеры, позволяющий отказаться от больших таблиц роутинга.
- Модульность с привязкой к пространствам имен (namespace).
- Широкое применение очередей и фоновых процессов для затратных операций (пока на базе gearman).

Pina Framework - это не вещь в себе, он вырос на нескольких реальных проектах со сложной бизнес-логикой. И, надеюсь, вместе с вами мы сможем развить его до нового качественного уровня.

Установка
---------

[](#установка)

Pina не гарантирует в будущем поддержку версий PHP младше PHP7, но в данный момент корректно работает на PHP 5.6+.

Требует PHP-расширений:

- mysqli
- mbstring
- xml

Для начала работы нужно скачать bootstrap версию приложения (скоро будет на github и в composer), обновить зависимости через composer, прописать корректные настройки адреса сайта и БД, и запустить php pinacli.php system.update для обновления БД.

Настройки
---------

[](#настройки)

В папке config расположены конфигурационные файлы. Каждый из них представляет собой PHP-файл, возвращающий ассоциативный массив. Для обращения к настройкам используется класс \\Pina\\Config.

Получить все настройки из файла config/app.php:

```
 \Pina\Config::load(‘app’);

```

Получить пользователя для подключения к БД,

```
\Pina\Config::get(‘db’, ‘user’);

```

Структура папок:
----------------

[](#структура-папок)

### Папка app

[](#папка-app)

Здесь в папке default содержится ваше приложение, разбитое на подпапки Layout, Modules, Skin. Layout содержит шаблоны со структурой страниц, Modules содержит контроллеры, шаблоны и классы модулей, а Skin - шаблоны общих визуальных элементов.

Почему все хранится в папке default? Pina поддерживает перегрузку шаблонов для темы оформления сайта. И темы хранятся в папках на одном уровне с default. Таким образом у вас всегда в default оригинальные шаблоны, а папке шаблона - перегруженные.

### Папка bootstrap

[](#папка-bootstrap)

Содержит несколько стандартных файлов для запуска фреймворка

### Папка config

[](#папка-config)

Содержит настроечный файлы

### Папка public

[](#папка-public)

Здесь храним файл index.php, который обрабатывает все HTTP запросы, так же здесь храним статику (css, js, картинки).

### Папка tests

[](#папка-tests)

Папка для юнит-тестов.

### Папка var

[](#папка-var)

Папка, где хранятся скомпилированные версии шаблонов, временные файлы, логи.

Обработка ошибок и логирование
------------------------------

[](#обработка-ошибок-и-логирование)

...

Модульность
-----------

[](#модульность)

Приложение разбивается на модули. Каждый модуль - это определенное пространство имен (namespace) внутри Pina\\Modules. Например Pina\\Modules\\Catalog.

Обычно код модуля расположен в папке внутри app/default/Modules (так как автозагрузка по стандарту PSR-4 настроена именно таким образом, что не мешает вам подгрузить новый модуль через composer).

Ключевым элементом модуля является класс Module внутри пространства имен модуля. Именно его система подгружает при инициализации модуля. И именно он указывает на точное местоположение модуля.

Класс модуля реализует интерфейс Pina\\ModuleInterface. Поэтому он должен определить как минимум четыре метода:

- getPath() - возвращает путь к каталогу модуля
- getNamespace() - возвращает название пространства имен модуля
- getTitle() - возвращает имя модуля
- boot() - запускается каждый раз при старте приложения.

Так же класс модуля может реализовать методы под разные режимы запуска приложения. Например, метод `http()` будет вызываться каждый раз, когда запускается обработка http-запроса. А метод `cli()` каждый раз, когда запускается обработка команды из командной строки. Эти методы должны вернуть настройки роутинга для своего типа приложения.

Так же обычно в классе модуля дополнительно объявляется функции в пространстве имен модуля. Например, функция локализации `__()`

Пример, объявления класса модуля:

```
