메인 콘텐츠로 건너뛰기

Feedable Core 개요

feedable-core는 Feedable의 코어 헬퍼와 내장 드라이버를 분리한 Composer 패키지입니다.
새로운 Laravel 프로젝트에 도입하면 스타터 키트와 동등한 기반을 재사용할 수 있습니다.

Response 클래스

Rss2ResponseJsonFeedResponse로 출력 포맷을 고정할 수 있습니다.
사용자가 포맷을 선택하는 구성에서는 ResponseFactory를 사용합니다.
use Revolution\Feedable\Core\Response\Rss2Response;

return new Rss2Response(
    title: $title,
    items: $items,
);
use Revolution\Feedable\Core\Enums\Format;
use Revolution\Feedable\Core\Response\ResponseFactory;

Route::get('feed.{format?}', function (Format $format = Format::RSS) use ($title, $items) {
    return ResponseFactory::format($format)->make(
        title: $title,
        items: $items,
    );
});

FeedItem / Author

FeedItem은 RSS/JSON Feed에서 공통화된 아이템 객체입니다.
Authorauthors 필드용 객체이며, Author::make()를 사용해 생성합니다.
use Revolution\Feedable\Core\Elements\Author;
use Revolution\Feedable\Core\Elements\FeedItem;

$item = new FeedItem(
    id: $url,
    url: $url,
    title: $title,
    summary: $summary,
    authors: [Author::make(name: $authorName)->toArray()],
);

Support 헬퍼

AbsoluteUri::resolve()

상대 경로를 절대 경로로 변환합니다.
use Revolution\Feedable\Core\Support\AbsoluteUri;

$absolute = AbsoluteUri::resolve('https://example.com/', '/images/sample.jpg');
use Revolution\Feedable\Core\Support\RSS;

$xml = RSS::filterLinks($rss, $links);

RSS::each()

use DOMElement;
use Revolution\Feedable\Core\Support\RSS;

$xml = RSS::each($rss, function (DOMElement $item) {
    $title = $item->getElementsByTagName('title')->item(0);

    if ($title && str_contains($title->textContent, 'NGワード')) {
        $item->parentNode?->removeChild($item);
    }
});

커스텀 드라이버 만드는 방법

1) 스타터 키트에 직접 추가하기

스타터 키트는 일반적인 Laravel 앱이므로, routes/web.php에 라우트를 추가하고 컨트롤러(또는 invokable 클래스)에서 구현할 수 있습니다.
use App\Http\Controllers\CustomFeedController;
use Revolution\Feedable\Core\Enums\Format;

Route::get('/custom/site.{format?}', CustomFeedController::class)
    ->whereIn('format', array_column(Format::cases(), 'value'));

2) Composer 패키지로 추가하기

여러 프로젝트에서 재사용하는 경우, ServiceProvider에서 라우트를 등록하는 구성이 다루기 편합니다.
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;

class CustomDriverServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Route::middleware('web')->group(__DIR__.'/../routes/web.php');
    }
}

3) Driver::about()으로 정보 등록하기(선택)

Driver::about() 등록은 지원 사이트 목록에 표시하기 위한 메타데이터입니다.
등록하지 않아도 드라이버 자체는 동작합니다.

참고: Laravel 블로그 드라이버

구현 예시로 Laravel 공식 블로그용 드라이버를 참조하세요.
마지막 수정일 2026년 7월 13일