Runway
Runway는 Flight 애플리케이션을 관리하는 데 도움이 되는 CLI 애플리케이션입니다. 컨트롤러를 생성하고, 모든 경로를 표시하며, 그 외 더 많은 기능을 제공합니다. 이는 우수한 adhocore/php-cli 라이브러리를 기반으로 합니다.
코드 보기 여기를 클릭하세요.
설치
Composer를 사용하여 설치하세요.
composer require flightphp/runway기본 구성
Runway를 처음 실행할 때, app/config/config.php에서 'runway' 키를 통해 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]를 실행할 수 있습니다. - Composer를 통해 설치된 패키지로 Runway를 사용 중이라면, 프로젝트 루트에서
vendor/bin/runway [command]를 실행할 수 있습니다.
명령어 도움말
어떤 명령어든 --help 플래그를 전달하여 명령어를 사용하는 방법에 대한 더 많은 정보를 얻을 수 있습니다.
php runway routes --help다음은 몇 가지 예시입니다:
컨트롤러 생성
runway.app_root의 구성에 기반하여, app/controllers/ 디렉토리에 컨트롤러를 생성합니다.
php runway make:controller MyControllerActive 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;
/**
* users 테이블에 대한 ActiveRecord 클래스.
* @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
* // $relations 배열에서 정의한 후 관계를 여기에 추가할 수도 있습니다
* @property CompanyRecord $company 관계 예시
*/
class UserRecord extends \flight\ActiveRecord
{
/**
* @var array $relations 모델의 관계 설정
* https://docs.flightphp.com/awesome-plugins/active-record#relationships
*/
protected array $relations = [];
/**
* 생성자
* @param mixed $databaseConnection 데이터베이스 연결
*/
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
{
/**
* 생성자
*
* @param array<string,mixed> $config app/config/config.php의 구성
*/
public function __construct(array $config)
{
parent::__construct('make:example', '문서화를 위한 예시 생성', $config);
$this->argument('<funny-gif>', '재미있는 GIF의 이름');
}
/**
* 함수 실행
*
* @return void
*/
public function execute()
{
$io = $this->app()->io();
$io->info('예시 생성 중...');
// 여기에 무언가 수행
$io->ok('예시가 생성되었습니다!');
}
}Flight 애플리케이션에 사용자 지정 명령어를 구축하는 방법에 대한 자세한 정보는 adhocore/php-cli 문서를 참조하세요!
구성 관리
v1.2.0부터 구성이 app/config/config.php로 이동되었으므로, 구성을 관리하는 몇 가지 도우미 명령어가 있습니다.
이전 구성 마이그레이션
이전 .runway-config.json 파일이 있다면, 다음 명령어로 쉽게 app/config/config.php로 마이그레이션할 수 있습니다:
php runway config:migrate구성 값 설정
config:set 명령어를 사용하여 구성 값을 설정할 수 있습니다. 파일을 열지 않고 구성 값을 업데이트하려는 경우 유용합니다.
php runway config:set app_root "app/"모든 Runway 구성
Runway 구성을 사용자 정의해야 한다면, app/config/config.php에서 이러한 값을 설정할 수 있습니다. 아래는 설정할 수 있는 몇 가지 추가 구성입니다:
<?php
// app/config/config.php
return [
// ... 다른 구성 값들 ...
'runway' => [
// 애플리케이션 디렉토리가 위치한 곳
'app_root' => 'app/',
// 루트 인덱스 파일이 위치한 디렉토리
'index_root' => 'public/',
// 다른 프로젝트의 루트 경로들
'root_paths' => [
'/home/user/different-project',
'/var/www/another-project'
],
// 기본 경로는 구성할 필요가 거의 없지만, 필요하다면 여기에 있습니다
'base_paths' => [
'/includes/libs/vendor', // 벤더 디렉토리의 고유한 경로가 있는 경우 등
],
// 최종 경로는 명령어 파일을 검색할 프로젝트 내 위치
'final_paths' => [
'src/diff-path/commands',
'app/module/admin/commands',
],
// 전체 경로를 추가하려면, 그대로 진행하세요 (프로젝트 루트에 대한 절대 또는 상대)
'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();
// 구성 접근
$app_root = $this->config['runway']['app_root'];
// 데이터베이스 연결 같은 서비스 접근
$database = $this->config['database']
// ...
}AI 도우미 래퍼
Runway에는 AI가 명령어를 생성하기 쉽게 하는 몇 가지 도우미 래퍼가 있습니다. Symfony Console과 유사하게 addOption과 addArgument를 사용할 수 있습니다. AI 도구를 사용하여 명령어를 생성하는 경우 유용합니다.
public function __construct(array $config)
{
parent::__construct('make:example', '문서화를 위한 예시 생성', $config);
// name 옵션은 null 가능하며 완전히 선택적입니다
$this->addOption('name', '예시의 이름', null);
}