Runway
Runway é uma aplicação CLI que ajuda a gerenciar suas aplicações Flight. Ela pode gerar controladores, exibir todas as rotas e mais. É baseada na excelente biblioteca adhocore/php-cli.
Clique aqui para visualizar o código.
Instalação
Instale com o composer.
composer require flightphp/runwayConfiguração Básica
Na primeira vez que você executar o Runway, ele tentará encontrar uma configuração runway em app/config/config.php via a chave 'runway'.
<?php
// app/config/config.php
return [
'runway' => [
'app_root' => 'app/',
'public_root' => 'public/',
],
];NOTA - A partir da v1.2.0,
.runway-config.jsonestá depreciado. Por favor, migre sua configuração paraapp/config/config.php. Você pode fazer isso facilmente com o comandophp runway config:migrate.
Detecção da Raiz do Projeto
O Runway é inteligente o suficiente para detectar a raiz do seu projeto, mesmo se você o executar de um subdiretório. Ele procura indicadores como composer.json, .git ou app/config/config.php para determinar onde está a raiz do projeto. Isso significa que você pode executar comandos do Runway de qualquer lugar no seu projeto!
Uso
O Runway tem vários comandos que você pode usar para gerenciar sua aplicação Flight. Existem duas maneiras fáceis de usar o Runway.
- Se você estiver usando o projeto skeleton, você pode executar
php runway [command]da raiz do seu projeto. - Se você estiver usando o Runway como um pacote instalado via composer, você pode executar
vendor/bin/runway [command]da raiz do seu projeto.
Lista de Comandos
Você pode visualizar uma lista de todos os comandos disponíveis executando o comando php runway.
php runwayAjuda do Comando
Para qualquer comando, você pode passar a flag --help para obter mais informações sobre como usar o comando.
php runway routes --helpAqui estão alguns exemplos:
Gerar um Controlador
Com base na configuração em runway.app_root, o local gerará um controlador para você no diretório app/controllers/.
php runway make:controller MyControllerGerar um Modelo Active Record
Primeiro, certifique-se de ter instalado o plugin Active Record. Com base na configuração em runway.app_root, o local gerará um registro para você no diretório app/records/.
php runway make:record usersSe, por exemplo, você tiver a tabela users com o seguinte esquema: id, name, email, created_at, updated_at, um arquivo semelhante ao seguinte será criado no arquivo app/records/UserRecord.php:
<?php
declare(strict_types=1);
namespace app\records;
/**
* Classe ActiveRecord para a tabela users.
* @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
* // você também poderia adicionar relacionamentos aqui uma vez que os defina no array $relations
* @property CompanyRecord $company Exemplo de um relacionamento
*/
class UserRecord extends \flight\ActiveRecord
{
/**
* @var array $relations Define os relacionamentos para o modelo
* https://docs.flightphp.com/awesome-plugins/active-record#relationships
*/
protected array $relations = [];
/**
* Construtor
* @param mixed $databaseConnection A conexão com o banco de dados
*/
public function __construct($databaseConnection)
{
parent::__construct($databaseConnection, 'users');
}
}Exibir Todas as Rotas
Isso exibirá todas as rotas que estão atualmente registradas com o Flight.
php runway routesSe você quiser visualizar apenas rotas específicas, você pode passar uma flag para filtrar as rotas.
# Exibir apenas rotas GET
php runway routes --get
# Exibir apenas rotas POST
php runway routes --post
# etc.Adicionar Comandos Personalizados ao Runway
Se você estiver criando um pacote para o Flight, ou quiser adicionar seus próprios comandos personalizados ao seu projeto, você pode fazer isso criando um diretório src/commands/, flight/commands/, app/commands/ ou commands/ para o seu projeto/pacote. Se precisar de mais personalização, veja a seção abaixo sobre Configuração.
Para criar um comando, você simplesmente estende a classe AbstractBaseCommand e implementa, no mínimo, um método __construct e um método execute.
<?php
declare(strict_types=1);
namespace flight\commands;
class ExampleCommand extends AbstractBaseCommand
{
/**
* Construtor
*
* @param array<string,mixed> $config Config de app/config/config.php
*/
public function __construct(array $config)
{
parent::__construct('make:example', 'Criar um exemplo para a documentação', $config);
$this->argument('<funny-gif>', 'O nome do gif engraçado');
}
/**
* Executa a função
*
* @return void
*/
public function execute()
{
$io = $this->app()->io();
$io->info('Criando exemplo...');
// Faça algo aqui
$io->ok('Exemplo criado!');
}
}Consulte a Documentação do adhocore/php-cli para mais informações sobre como construir seus próprios comandos personalizados na sua aplicação Flight!
Gerenciamento de Configuração
Como a configuração foi movida para app/config/config.php a partir da v1.2.0, há alguns comandos auxiliares para gerenciar a configuração.
Migrar Configuração Antiga
Se você tiver um arquivo .runway-config.json antigo, você pode migrá-lo facilmente para app/config/config.php com o seguinte comando:
php runway config:migrateDefinir Valor de Configuração
Você pode definir um valor de configuração usando o comando config:set. Isso é útil se você quiser atualizar um valor de configuração sem abrir o arquivo.
php runway config:set app_root "app/"Obter Valor de Configuração
Você pode obter um valor de configuração usando o comando config:get.
php runway config:get app_rootTodas as Configurações do Runway
Se você precisar personalizar a configuração para o Runway, você pode definir esses valores em app/config/config.php. Abaixo estão algumas configurações adicionais que você pode definir:
<?php
// app/config/config.php
return [
// ... outros valores de config ...
'runway' => [
// Este é o local onde o diretório da sua aplicação está localizado
'app_root' => 'app/',
// Este é o diretório onde o seu arquivo de índice raiz está localizado
'index_root' => 'public/',
// Estes são os caminhos para as raízes de outros projetos
'root_paths' => [
'/home/user/different-project',
'/var/www/another-project'
],
// Caminhos base provavelmente não precisam ser configurados, mas está aqui se você quiser
'base_paths' => [
'/includes/libs/vendor', // se você tiver um caminho realmente único para o seu diretório vendor ou algo assim
],
// Caminhos finais são locais dentro de um projeto para procurar os arquivos de comando
'final_paths' => [
'src/diff-path/commands',
'app/module/admin/commands',
],
// Se você quiser apenas adicionar o caminho completo, vá em frente (absoluto ou relativo à raiz do projeto)
'paths' => [
'/home/user/different-project/src/diff-path/commands',
'/var/www/another-project/app/module/admin/commands',
'app/my-unique-commands'
]
]
];Acessando a Configuração
Se você precisar acessar os valores de configuração de forma eficaz, você pode acessá-los através do método __construct ou do método app(). Também é importante notar que, se você tiver um arquivo app/config/services.php, esses serviços também estarão disponíveis para o seu comando.
public function execute()
{
$io = $this->app()->io();
// Acessar configuração
$app_root = $this->config['runway']['app_root'];
// Acessar serviços como talvez uma conexão com o banco de dados
$database = $this->config['database']
// ...
}Wrappers de Auxílio de IA
O Runway tem alguns wrappers de auxílio que facilitam para a IA gerar comandos. Você pode usar addOption e addArgument de uma maneira que se sinta semelhante ao Symfony Console. Isso é útil se você estiver usando ferramentas de IA para gerar seus comandos.
public function __construct(array $config)
{
parent::__construct('make:example', 'Criar um exemplo para a documentação', $config);
// O argumento mode é anulável e padrão para completamente opcional
$this->addOption('name', 'O nome do exemplo', null);
}