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