기본 플러그인 생성 및 배포 프로세스
원리
- 크로스 도메인 플러그인을 예로 들면, 플러그인은 세 부분으로 나뉩니다. 하나는 크로스 도메인 미들웨어 프로그램 파일이고, 다른 하나는 미들웨어 구성 파일인
middleware.php
이며, 마지막으로는 명령어를 통해 자동으로 생성되는Install.php
파일입니다. - 우리는 명령어를 사용하여 세 개의 파일을 패키징하고 composer에 배포합니다.
- 사용자가 composer를 통해 크로스 도메인 플러그인을 설치하면, 플러그인의
Install.php
는 크로스 도메인 미들웨어 프로그램 파일 및 구성 파일을/{주 프로젝트}/config/plugin
아래에 복사하여 webman이 로드할 수 있도록 합니다. 이를 통해 크로스 도메인 미들웨어 파일이 자동으로 구성되어 활성화됩니다. - 사용자가 composer를 통해 해당 플러그인을 삭제할 경우,
Install.php
는 해당하는 크로스 도메인 미들웨어 프로그램 파일 및 구성 파일을 삭제하여 플러그인이 자동으로 제거됩니다.
규정
- 플러그인 이름은
제조사
와플러그인 이름
두 부분으로 구성되며, 예를 들어webman/push
와 같이 composer 패키지 이름과 일치합니다. - 플러그인 구성 파일은 통일하여
config/plugin/제조사/플러그인 이름/
아래에 두어야 하며, 콘솔 명령어가 자동으로 구성 디렉토리를 생성합니다. 플러그인이 구성이 필요 없으면 자동으로 생성된 구성 디렉토리를 삭제해야 합니다. - 플러그인 구성 디렉토리는
app.php
플러그인 주요 구성,bootstrap.php
프로세스 시작 구성,route.php
라우팅 구성,middleware.php
미들웨어 구성,process.php
사용자 정의 프로세스 구성,database.php
데이터베이스 구성,redis.php
Redis 구성,thinkorm.php
ThinkORM 구성을 지원합니다. 이러한 구성은 webman에 의해 자동으로 인식됩니다. - 플러그인은 다음 방법으로 구성을 가져옵니다:
config('plugin.제조사.플러그인 이름.구성 파일.특정 구성 항목');
예:config('plugin.webman.push.app.app_key')
- 플러그인이 고유한 데이터베이스 구성을 가진 경우, 다음과 같은 방법으로 액세스합니다.
illuminate/database
는Db::connection('plugin.제조사.플러그인 이름.특정 연결')
,thinkorm
은Db::connct('plugin.제조사.플러그인 이름.특정 연결')
입니다. - 플러그인이
app/
디렉토리에 비즈니스 파일을 넣어야 할 경우, 사용자 프로젝트 및 다른 플러그인과 충돌하지 않도록 해야 합니다. - 플러그인은 주 프로젝트에 파일이나 디렉토리를 복사하는 것을 최대한 피해야 하며, 예를 들어 크로스 도메인 플러그인은 구성 파일 외에 중간웨어 파일을
vendor/webman/cros/src
에 두어야 하며, 주 프로젝트에 복사할 필요는 없습니다. - 플러그인 네임스페이스는 대문자를 사용하는 것이 좋습니다. 예:
Webman/Console
.
예시
webman/console
명령어 설치하기
composer require webman/console
플러그인 생성
가정해보면, 생성할 플러그인의 이름은 foo/admin
입니다. (이 이름은 이후 composer가 배포할 프로젝트 이름이며, 이름은 소문자로 작성되어야 합니다.)
명령어를 실행합니다:
php webman plugin:create --name=foo/admin
플러그인을 생성하면 vendor/foo/admin
디렉토리가 생성되어 플러그인 관련 파일을 저장하고, config/plugin/foo/admin
디렉토리가 생성되어 플러그인 관련 구성 파일을 저장합니다.
주의
config/plugin/foo/admin
은 다음 구성을 지원합니다:app.php
플러그인 주요 구성,bootstrap.php
프로세스 시작 구성,route.php
라우팅 구성,middleware.php
미들웨어 구성,process.php
사용자 정의 프로세스 구성,database.php
데이터베이스 구성,redis.php
Redis 구성,thinkorm.php
ThinkORM 구성. 구성 형식은 webman과 동일하며, 이러한 구성은 webman에 의해 자동으로 인식되어 통합됩니다.
사용할 때는plugin
접두어로 접근합니다. 예:config('plugin.foo.admin.app');
플러그인 내보내기
플러그인 개발을 마친 후, 다음 명령어를 실행하여 플러그인을 내보냅니다:
php webman plugin:export --name=foo/admin
내보내기
설명
내보내기를 하면config/plugin/foo/admin
디렉토리가vendor/foo/admin/src
아래에 복사되며, 동시에 자동으로Install.php
가 생성됩니다.Install.php
는 자동 설치 및 자동 제거 시 몇 가지 작업을 수행하는 데 사용됩니다.
기본 설치 작업은vendor/foo/admin/src
아래의 구성을 현재 프로젝트의config/plugin
으로 복사하는 것입니다.
제거 시 기본 작업은 현재 프로젝트의config/plugin
아래의 구성 파일을 삭제하는 것입니다.
Install.php
를 수정하여 플러그인 설치 및 제거 시 일부 사용자 정의 작업을 수행할 수 있습니다.
플러그인 제출
- github 및 packagist 계정이 있다고 가정합니다.
- github에서 admin 프로젝트를 생성하고 코드를 업로드하며, 프로젝트 주소는
https://github.com/당신의 사용자 이름/admin
이라고 가정합니다. - 주소
https://github.com/당신의 사용자 이름/admin/releases/new
로 이동하여v1.0.0
과 같은 릴리스를 게시합니다. - packagist에 들어가서 네비게이션에서
Submit
을 클릭하고 당신의 github 프로젝트 주소https://github.com/당신의 사용자 이름/admin
를 제출하면 플러그인 배포가 완료됩니다.
팁
packagist
에서 플러그인을 제출할 때 충돌 메시지가 나올 경우, 다른 제조사 이름을 선택할 수 있습니다. 예를 들어foo/admin
을myfoo/admin
으로 변경합니다.
이후 플러그인 프로젝트 코드에 업데이트가 있으면, 코드를 github에 동기화하고 https://github.com/당신의 사용자 이름/admin/releases/new
주소로 다시 들어가 새 릴리스를 게시한 다음 https://packagist.org/packages/foo/admin
페이지에서 Update
버튼을 클릭하여 버전을 업데이트합니다.
플러그인에 명령 추가
때때로 플러그인은 일부 사용자 정의 명령이 필요하여 몇 가지 보조 기능을 제공해야 합니다. 예를 들어 webman/redis-queue
플러그인을 설치하면, 프로젝트에 자동으로 redis-queue:consumer
명령이 추가됩니다. 사용자는 php webman redis-queue:consumer send-mail
을 실행하면 프로젝트에 SendMail.php
소비자 클래스가 생성됩니다. 이는 빠른 개발에 도움이 됩니다.
가정해보면 foo/admin
플러그인에 foo-admin:add
명령을 추가한다고 하면, 아래와 같은 단계를 참조하십시오.
새 명령 생성
새 명령 파일 vendor/foo/admin/src/FooAdminAddCommand.php
생성
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command
{
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = '여기는 명령줄 설명입니다';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, '이름 추가');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
주의
플러그인 간의 명령 충돌을 피하기 위해, 명령어 형식은제조사-플러그인명:특정 명령
을 사용하는 것이 좋습니다. 예를 들어foo/admin
플러그인의 모든 명령은foo-admin:
을 접두사로 가져야 하며, 예를 들어foo-admin:add
입니다.
구성 추가
새 구성 파일 config/plugin/foo/admin/command.php
생성
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....여러 개의 구성을 추가할 수 있습니다...
];
팁
command.php
는 플러그인에 사용자 정의 명령을 구성하는 데 사용되며, 배열의 각 요소는 하나의 명령 클래스 파일에 해당하며, 각 클래스 파일은 하나의 명령에 해당합니다. 사용자가 명령줄을 실행할 때webman/console
은 각 플러그인의command.php
에 설정된 사용자 정의 명령을 자동으로 로드합니다. 명령줄 관련 더 많은 정보는 명령줄을 참조하십시오.
내보내기 실행
명령어 php webman plugin:export --name=foo/admin
를 실행하여 플러그인을 내보내고 packagist
에 제출합니다. 이렇게 하면 사용자들이 foo/admin
플러그인을 설치한 후, foo-admin:add
명령이 추가됩니다. php webman foo-admin:add jerry
를 실행하면 Admin add jerry
가 출력됩니다.