기본 플러그인 생성 및 배포 프로세스
원리
- 크로스 도메인 플러그인을 예로 들면, 플러그인은 세 부분으로 나뉩니다. 하나는 크로스 도메인 미들웨어 프로그램 파일이고, 다른 하나는 미들웨어 구성 파일인
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.phpRedis 구성,thinkorm.phpThinkORM 구성을 지원합니다. 이러한 구성은 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.phpRedis 구성,thinkorm.phpThinkORM 구성. 구성 형식은 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가 출력됩니다.