Runway
Runway — это CLI-приложение, которое помогает управлять вашими приложениями Flight. Оно может генерировать контроллеры, отображать все маршруты и многое другое. Оно основано на отличной библиотеке adhocore/php-cli.
Нажмите здесь, чтобы просмотреть код.
Установка
Установите с помощью composer.
composer require flightphp/runwayБазовая конфигурация
В первый раз при запуске Runway попытается найти конфигурацию runway в app/config/config.php через ключ 'runway'.
<?php
// app/config/config.php
return [
'runway' => [
'app_root' => 'app/',
'public_root' => 'public/',
],
];ПРИМЕЧАНИЕ - Начиная с v1.2.0,
.runway-config.jsonустарел. Пожалуйста, мигрируйте вашу конфигурацию вapp/config/config.php. Вы можете сделать это легко с помощью командыphp runway config:migrate.
Обнаружение корня проекта
Runway достаточно умён, чтобы обнаружить корень вашего проекта, даже если вы запускаете его из поддиректории. Он ищет индикаторы, такие как composer.json, .git или app/config/config.php, чтобы определить, где находится корень проекта. Это значит, что вы можете запускать команды Runway откуда угодно в вашем проекте!
Использование
Runway имеет множество команд, которые вы можете использовать для управления вашим приложением Flight. Есть два простых способа использовать Runway.
- Если вы используете скелетный проект, вы можете запустить
php runway [command]из корня вашего проекта. - Если вы используете Runway как пакет, установленный через composer, вы можете запустить
vendor/bin/runway [command]из корня вашего проекта.
Список команд
Вы можете просмотреть список всех доступных команд, запустив команду php runway.
php runwayСправка по командам
Для любой команды вы можете передать флаг --help, чтобы получить больше информации о том, как использовать команду.
php runway routes --helpВот несколько примеров:
Генерация контроллера
На основе конфигурации в runway.app_root будет сгенерирован контроллер в директории app/controllers/.
php runway make:controller MyControllerГенерация модели Active Record
Сначала убедитесь, что вы установили плагин Active Record. На основе конфигурации в runway.app_root будет сгенерирована запись в директории app/records/.
php runway make:record usersНапример, если у вас есть таблица users со следующей схемой: id, name, email, created_at, updated_at, будет создан файл, похожий на следующий, в app/records/UserRecord.php:
<?php
declare(strict_types=1);
namespace app\records;
/**
* ActiveRecord class for the users table.
* @link https://docs.flightphp.com/awesome-plugins/active-record
*
* @property int $id
* @property string $name
* @property string $email
* @property string $created_at
* @property string $updated_at
* // you could also add relationships here once you define them in the $relations array
* @property CompanyRecord $company Example of a relationship
*/
class UserRecord extends \flight\ActiveRecord
{
/**
* @var array $relations Set the relationships for the model
* https://docs.flightphp.com/awesome-plugins/active-record#relationships
*/
protected array $relations = [];
/**
* Constructor
* @param mixed $databaseConnection The connection to the database
*/
public function __construct($databaseConnection)
{
parent::__construct($databaseConnection, 'users');
}
}Отображение всех маршрутов
Это отобразит все маршруты, которые в настоящее время зарегистрированы в Flight.
php runway routesЕсли вы хотите просмотреть только конкретные маршруты, вы можете передать флаг для фильтрации маршрутов.
# Отобразить только GET-маршруты
php runway routes --get
# Отобразить только POST-маршруты
php runway routes --post
# и т.д.Добавление пользовательских команд в Runway
Если вы создаёте пакет для Flight или хотите добавить свои собственные пользовательские команды в проект, вы можете сделать это, создав директорию src/commands/, flight/commands/, app/commands/ или commands/ для вашего проекта/пакета. Если вам нужна дальнейшая настройка, см. раздел ниже о Конфигурации.
Чтобы создать команду, просто расширьте класс AbstractBaseCommand и реализуйте как минимум метод __construct и метод execute.
<?php
declare(strict_types=1);
namespace flight\commands;
class ExampleCommand extends AbstractBaseCommand
{
/**
* Construct
*
* @param array<string,mixed> $config Config from app/config/config.php
*/
public function __construct(array $config)
{
parent::__construct('make:example', 'Create an example for the documentation', $config);
$this->argument('<funny-gif>', 'The name of the funny gif');
}
/**
* Executes the function
*
* @return void
*/
public function execute()
{
$io = $this->app()->io();
$io->info('Creating example...');
// Do something here
$io->ok('Example created!');
}
}См. Документацию adhocore/php-cli для получения дополнительной информации о том, как создавать свои собственные пользовательские команды в вашем приложении Flight!
Управление конфигурацией
Поскольку конфигурация перемещена в app/config/config.php начиная с v1.2.0, есть несколько вспомогательных команд для управления конфигурацией.
Миграция старой конфигурации
Если у вас есть старый файл .runway-config.json, вы можете легко мигрировать его в app/config/config.php с помощью следующей команды:
php runway config:migrateУстановка значения конфигурации
Вы можете установить значение конфигурации с помощью команды config:set. Это полезно, если вы хотите обновить значение конфигурации без открытия файла.
php runway config:set app_root "app/"Получение значения конфигурации
Вы можете получить значение конфигурации с помощью команды config:get.
php runway config:get app_rootВсе конфигурации Runway
Если вам нужно настроить конфигурацию для Runway, вы можете установить эти значения в app/config/config.php. Ниже приведены некоторые дополнительные конфигурации, которые вы можете установить:
<?php
// app/config/config.php
return [
// ... other config values ...
'runway' => [
// This is where your application directory is located
'app_root' => 'app/',
// This is the directory where your root index file is located
'index_root' => 'public/',
// These are the paths to the roots of other projects
'root_paths' => [
'/home/user/different-project',
'/var/www/another-project'
],
// Base paths most likely don't need to be configured, but it's here if you want it
'base_paths' => [
'/includes/libs/vendor', // if you have a really unique path for your vendor directory or something
],
// Final paths are locations within a project to search for the command files
'final_paths' => [
'src/diff-path/commands',
'app/module/admin/commands',
],
// If you want to just add the full path, go right ahead (absolute or relative to project root)
'paths' => [
'/home/user/different-project/src/diff-path/commands',
'/var/www/another-project/app/module/admin/commands',
'app/my-unique-commands'
]
]
];Доступ к конфигурации
Если вам нужно эффективно получить доступ к значениям конфигурации, вы можете обращаться к ним через метод __construct или метод app(). Также важно отметить, что если у вас есть файл app/config/services.php, эти сервисы также будут доступны для вашей команды.
public function execute()
{
$io = $this->app()->io();
// Access configuration
$app_root = $this->config['runway']['app_root'];
// Access services like maybe a database connection
$database = $this->config['database']
// ...
}Обертки помощников ИИ
Runway имеет некоторые обертки помощников, которые облегчают генерацию команд для ИИ. Вы можете использовать addOption и addArgument таким образом, который похож на Symfony Console. Это полезно, если вы используете инструменты ИИ для генерации ваших команд.
public function __construct(array $config)
{
parent::__construct('make:example', 'Create an example for the documentation', $config);
// The mode argument is nullable and defaults to completely optional
$this->addOption('name', 'The name of the example', null);
}