跳转到主要内容

Feedable Core 概览

feedable-core 是将 Feedable 的核心辅助工具与内置驱动分离出来的 Composer 包。 将其引入到新的 Laravel 项目后,你就能复用与 starter kit 同等的基础设施。

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 之间通用的条目对象。 Author 是用于 authors 字段的对象,通过 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) 直接添加到 starter kit 中

Starter kit 本身就是普通的 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日