spatie / laravel-feed
生成 RSS 源
Requires
- php: ^8.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/http: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.15
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- spatie/pest-plugin-snapshots: ^2.0
- spatie/test-time: ^1.2
- dev-main
- 4.4.0
- 4.3.0
- 4.2.1
- 4.2.0
- 4.1.5
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.2.1
- 3.2.0
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- 2.7.1
- 2.7.0
- 2.6.2
- 2.6.1
- 2.6.0
- 2.5.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- v1.x-dev
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.10
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-08-30 11:18:31 UTC
README
此包提供了一种简单的方法来为您的 Laravel 应用程序生成源。支持的格式包括 RSS、Atom 和 JSON。您几乎不需要编写任何代码。只需按照安装说明进行操作,更新您的配置文件,然后就可以开始使用了。
Spatie 是一家位于比利时的安特卫普网络设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
支持我们
我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄来明信片,说明您正在使用我们的哪个包。您可以在我们的 联系页面 上找到我们的地址。我们将在 我们的虚拟明信片墙 上发布所有收到的明信片。
安装
您可以通过 composer 安装此包
composer require spatie/laravel-feed
使用 feeds
-宏注册将显示源的路由。
// In routes/web.php Route::feeds();
可选地,您可以将字符串作为宏的第一个参数传递。该字符串将用作所有配置的源的 URL 前缀。
接下来,您必须发布配置文件
php artisan feed:install
以下是样子
return [ 'feeds' => [ 'main' => [ /* * Here you can specify which class and method will return * the items that should appear in the feed. For example: * [App\Model::class, 'getAllFeedItems'] * * You can also pass an argument to that method. Note that their key must be the name of the parameter: * * [App\Model::class, 'getAllFeedItems', 'parameterName' => 'argument'] */ 'items' => '', /* * The feed will be available on this url. */ 'url' => '', 'title' => 'My feed', 'description' => 'The description of the feed.', 'language' => 'en-US', /* * The image to display for the feed. For Atom feeds, this is displayed as * a banner/logo; for RSS and JSON feeds, it's displayed as an icon. * An empty value omits the image attribute from the feed. */ 'image' => '', /* * The format of the feed. Acceptable values are 'rss', 'atom', or 'json'. */ 'format' => 'atom', /* * The view that will render the feed. */ 'view' => 'feed::atom', /* * The mime type to be used in the <link> tag. Set to an empty string to automatically * determine the correct value. */ 'type' => '', /* * The content type for the feed response. Set to an empty string to automatically * determine the correct value. */ 'contentType' => '', ], ], ];
可选地,您可以发布视图文件
php artisan vendor:publish --provider="Spatie\Feed\FeedServiceProvider" --tag="feed-views"
用法
假设您有一个名为 NewsItem
的模型,其中包含您希望在源中显示的记录。
首先,您必须在模型上实现 Feedable
接口。 Feedable
期望一个方法: toFeedItem
,该方法应返回一个 FeedItem
实例。
// app/NewsItem.php use Illuminate\Database\Eloquent\Model; use Spatie\Feed\Feedable; use Spatie\Feed\FeedItem; class NewsItem extends Model implements Feedable { public function toFeedItem(): FeedItem { return FeedItem::create() ->id($this->id) ->title($this->title) ->summary($this->summary) ->updated($this->updated_at) ->link($this->link) ->authorName($this->author) ->authorEmail($this->authorEmail); } }
如果您愿意,返回一个包含必要键的关联数组也可以解决问题。
// app/NewsItem.php use Illuminate\Database\Eloquent\Model; use Spatie\Feed\Feedable; use Spatie\Feed\FeedItem; class NewsItem extends Model implements Feedable { public function toFeedItem(): FeedItem { return FeedItem::create([ 'id' => $this->id, 'title' => $this->title, 'summary' => $this->summary, 'updated' => $this->updated_at, 'link' => $this->link, 'authorName' => $this->authorName, ]); } }
接下来,您必须创建一个将返回必须显示在源中的所有项的方法。您可以命名该方法的任何名称,并且可以执行任何查询。
// app/NewsItem.php public static function getFeedItems() { return NewsItem::all(); }
最后,您必须在配置文件中放入您类的名称和您希望渲染源的 URL
// config/feed.php return [ 'feeds' => [ 'news' => [ /* * Here you can specify which class and method will return * the items that should appear in the feed. For example: * 'App\Model@getAllFeedItems' * or * ['App\Model', 'getAllFeedItems'] * * You can also pass an argument to that method. Note that their key must be the name of the parameter: * * ['App\Model@getAllFeedItems', 'parameterName' => 'argument'] * or * ['App\Model', 'getAllFeedItems', 'parameterName' => 'argument'] */ 'items' => 'App\NewsItem@getFeedItems', /* * The feed will be available on this url. */ 'url' => '/feed', 'title' => 'All newsitems on mysite.com', /* * The format of the feed. Acceptable values are 'rss', 'atom', or 'json'. */ 'format' => 'atom', /* * Custom view for the items. * * Defaults to feed::feed if not present. */ 'view' => 'feed::feed', ], ], ];
items
键必须指向以下之一的方法
- 包含
Feedable
的数组或集合 - 包含
FeedItem
的数组或集合 - 包含源项值的数组的数组或集合
自定义您的源视图
此包提供了 feed::feed
视图,用于显示您的源详细信息。
然而,您可以通过在源配置中提供 view
键来使用每个源的定制视图。
在以下示例中,我们使用之前的 News
源,并使用定制的 feeds.news
视图(位于 resources/views/feeds/news.blade.php
)。
// config/feed.php return [ 'feeds' => [ 'news' => [ 'items' => ['App\NewsItem', 'getFeedItems'], 'url' => '/feed', 'title' => 'All newsitems on mysite.com', /* * The format of the feed. Acceptable values are 'rss', 'atom', or 'json'. */ 'format' => 'atom', /* * Custom view for the items. * * Defaults to feed::feed if not present. */ 'view' => 'feeds.news', ], ], ];
自动生成源链接
为了发现一个订阅源,订阅阅读器会在您的HTML文档的头部部分寻找一个类似这样的标签
<link rel="alternate" type="application/atom+xml" title="News" href="/feed">
您可以通过部分视图将此添加到您的 <head>
中。
@include('feed::links')
作为替代方案,您可以使用此Blade组件
<x-feed-links />
测试
composer test
变更日志
有关最近变更的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。