Skip to content

[핵심개념.플러그인] 시작하기

개요

Filament는 훌륭한 앱을 만들기 위해 필요한 거의 모든 도구를 제공하지만, 때로는 앱에만 필요한 기능을 추가하거나 다른 개발자가 자신의 앱에 포함할 수 있는 재배포 가능한 패키지로서 직접 기능을 추가해야 할 때가 있습니다. 이를 위해 Filament는 기능을 확장할 수 있는 플러그인 시스템을 제공합니다.

본격적으로 시작하기 전에, 플러그인이 사용될 수 있는 다양한 컨텍스트를 이해하는 것이 중요합니다. 주요 컨텍스트는 두 가지입니다:

  1. 패널 플러그인: 패널 빌더와 함께 사용되는 플러그인입니다. 일반적으로 패널 내부에서 사용되거나 자체적으로 완전한 패널로서 기능을 추가할 때만 사용됩니다. 예시는 다음과 같습니다:
    1. 대시보드에 위젯 형태로 특정 기능을 추가하는 플러그인.
    2. 블로그나 사용자 관리 기능과 같은 앱에 리소스/기능 집합을 추가하는 플러그인.
  2. 독립형 플러그인: 패널 빌더 외부의 모든 컨텍스트에서 사용되는 플러그인입니다. 예시는 다음과 같습니다:
    1. 폼 빌더에서 사용할 커스텀 필드를 추가하는 플러그인.
    2. 테이블 빌더에 커스텀 컬럼이나 필터를 추가하는 플러그인.

이 두 가지는 플러그인을 만들 때 염두에 두어야 할 서로 다른 개념적 컨텍스트이지만, 동일한 플러그인 내에서 함께 사용할 수 있습니다. 반드시 상호 배타적일 필요는 없습니다.

중요한 개념

플러그인 제작의 구체적인 내용에 들어가기 전에, 이해해야 할 몇 가지 중요한 개념이 있습니다. 플러그인을 만들기 전에 다음을 숙지하는 것이 좋습니다:

  1. Laravel 패키지 개발
  2. Spatie 패키지 도구
  3. Filament 에셋 관리

플러그인 객체

Filament v3에서는 플러그인을 구성하는 데 사용되는 플러그인 객체 개념이 도입되었습니다. 이 객체는 Filament\Contracts\Plugin 인터페이스를 구현하는 간단한 PHP 클래스입니다. 이 클래스는 플러그인을 구성하는 데 사용되며, 플러그인의 주요 진입점입니다. 또한 플러그인에서 사용할 수 있는 리소스와 아이콘을 등록하는 데도 사용됩니다.

플러그인 객체는 매우 유용하지만, 플러그인을 만들 때 반드시 필요하지는 않습니다. 패널 플러그인 만들기 튜토리얼에서 볼 수 있듯이, 플러그인 객체를 사용하지 않고도 플러그인을 만들 수 있습니다.

정보 플러그인 객체는 패널 프로바이더에만 사용됩니다. 독립형 플러그인은 이 객체를 사용하지 않습니다. 독립형 플러그인의 모든 구성은 플러그인의 서비스 프로바이더에서 처리해야 합니다.

에셋 등록하기

모든 에셋 등록(CSS, JS, Alpine 컴포넌트 포함)은 플러그인의 서비스 프로바이더의 packageBooted() 메서드에서 수행해야 합니다. 이를 통해 Filament가 에셋을 에셋 관리자에 등록하고 필요할 때 로드할 수 있습니다.

플러그인 만들기

플러그인을 처음부터 직접 만들 수도 있지만, Filament 플러그인 스켈레톤을 사용하여 빠르게 시작하는 것을 권장합니다. 이 스켈레톤에는 빠르게 시작하는 데 필요한 모든 보일러플레이트가 포함되어 있습니다.

사용법

스켈레톤을 사용하려면, GitHub 저장소로 이동하여 "Use this template" 버튼을 클릭하세요. 그러면 스켈레톤 코드가 포함된 새 저장소가 계정에 생성됩니다. 이후 저장소를 자신의 컴퓨터로 클론하세요. 코드를 컴퓨터에 받은 후, 프로젝트의 루트 디렉터리로 이동하여 다음 명령어를 실행하세요:

bash
php ./configure.php

이 명령어는 플러그인을 구성하기 위한 일련의 질문을 합니다. 모든 질문에 답하면, 스크립트가 새로운 플러그인 구조를 만들어주며, 이제 Filament를 위한 멋진 새로운 확장 기능을 만들기 시작할 수 있습니다.

기존 플러그인 업그레이드하기

각 플러그인은 사용 범위와 기능이 매우 다양하기 때문에, 기존 플러그인을 업그레이드하는 데 일괄적으로 적용할 수 있는 방법은 없습니다. 하지만 모든 플러그인에 공통적으로 적용되는 한 가지는 PluginServiceProvider의 사용 중단입니다.

플러그인 서비스 프로바이더에서, 이제는 PackageServiceProvider를 확장하도록 변경해야 합니다. 또한 서비스 프로바이더에 정적 $name 속성을 추가해야 합니다. 이 속성은 Filament에 플러그인을 등록하는 데 사용됩니다. 서비스 프로바이더 예시는 다음과 같습니다:

php
class MyPluginServiceProvider extends PackageServiceProvider
{
    public static string $name = 'my-plugin';

    public function configurePackage(Package $package): void
    {
        $package->name(static::$name);
    }
}

플러그인을 업그레이드하기 전에 이 가이드를 전체적으로 읽어보세요. 개념을 이해하고 플러그인을 만드는 방법을 익히는 데 도움이 됩니다.

  1. Filament 에셋 관리
  2. 패널 플러그인 개발
  3. 아이콘 관리
  4. 색상 관리
  5. 스타일 커스터마이징

나를 위한 문서 한글화