Верх страницы
Обложка к записи PHP-фреймворк Tempest
Время для прочтения: 1 мин. 0 сек.

PHP-фреймворк Tempest

Tempest – PHP MVC микро-фреймворк, который не мешает вам работать.

Его основная философия заключается в том, что разработчики должны писать как можно меньше кода, связанного с фреймворком, чтобы было время сосредоточиться на коде самого приложения.

Простой пример:

final readonly class BookController
{
    #[Get('/blog')]
    public function index() { /* … */ }
    
    #[Get('/blog/{post}')]
    public function show(Post $post) { /* … */ }
}

final readonly class RssSyncCommand
{
    public function __construct(private Console $console) {}

    #[ConsoleCommand('rss:sync')]
    public function __invoke(bool $force = false)  { /* … */ }
}

Установка Tempest

Вы можете установить Tempest двумя способами: как веб-приложение с базовым функционалом, или в качестве пакета в любом проекте, который вы захотите.

Tempest как проект

Если вы хотите начать новый проект с Tempest, используйте tempest/app в качестве отправной точки. Для запуска используйте composer:

composer create-project tempest/app my-app
cd my-app

Данный проект включает в себя простой фронтенд, в том числе tailwind:

npm run dev

Tempest как пакет

Если вам не нужен весь этот зоопарк в вашем приложении, вы можете установить tempest/framework как отдельный пакет. Использовать его можно в любом проекте, который может уже содержать код или быть пустым.

composer require tempest/framework

Установив Tempest таким образом, вы получите доступ к консольной команде tempest в виде бинарного файла composer:

./vendor/bin/tempest

Опционально вы можете выбрать установку точек входа Tempest в ваш проект:

./vendor/bin/tempest install

Установка Tempest в проект означает, что он скопирует один или два файла в этот проект:

  • public/index.php — точка входа в веб-приложение
  • tempest — точка входа в консольное приложение.

Вы можете выбрать, какие файлы вы хотите установить, и вы всегда можете повторить команду install позднее.

Простой проект на Tempest

Tempest не будет навязывать вам какую-либо фиксированную структуру файлов: один из основных принципов Tempest заключается в том, что он будет сканировать код проекта за вас и автоматически обнаружит все необходимые ему файлы.

Например: Tempest способен отличить метод контроллера от консольной команды, глядя на код, а не полагаясь на соглашения об именовании. Это называется discovery, и это одна из самых мощных возможностей Tempest.

Вы можете создать проект, который будет выглядеть следующим образом:

app
├── Console
│   └── RssSyncCommand.php
├── Controllers
│   ├── BlogPostController.php
│   └── HomeController.php
└── Views
    ├── blog.view.php
    └── home.view.php

Или проект, который выглядит следующим образом:

app
├── Blog
│   ├── BlogPostController.php
│   ├── RssSyncCommand.php
│   └── blog.view.php
└── Home
    ├── HomeController.php
    └── home.view.phpPre Tempest je to všetko rovnaké.

Для Tempest это не имеет значения.

Discovery работает, сканируя код проекта и просматривая каждый файл и метод по отдельности, чтобы определить, что делает этот код. Для продуктовых приложений Tempest будет кэшировать эти результаты как PHP-код, так что производительность при этом абсолютно не страдает.

Например, Tempest может определить, какие методы являются методами контроллера, на основе их атрибутов маршрута:

final readonly class BlogPostController
{
    #[Get('/blog')]
    public function index() 
    { /* … */ }
    
    #[Get('/blog/{post}')]
    public function show(Post $post) 
    { /* … */ }
}

Кроме того, он способен обнаруживать консольные команды на основе их атрибута:

final readonly class RssSyncCommand
{
    public function __construct(private Console $console) {}

    #[ConsoleCommand('rss:sync')]
    public function __invoke(bool $force = false)  
    { /* … */ }
}

Визуально

Серия видео-роликов, посвященная Tempest доступна по ссылке.

Как помочь проекту

Команда Tempest приветствует ваши PR. Если у вас есть пожелания по функциям или имеются сообщения об ошибках, перейдите на страницу ошибок и не стесняйтесь создать новый issue.

Если вы хотите отправить PR, то сначала проверьие и запустите Tempest локально следующим образом:

git clone git@github.com:tempestphp/tempest-framework.git
cd tempest-framework/
composer update

Перед отправкой PR запустите composer qa локально:

composer qa

Ссылки

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы