Este pacote fornece uma maneira fácil de gerar um feed para sua aplicação Laravel. Os formatos suportados são RSS, Atom e JSON. Quase não há necessidade de codificação de sua parte. Basta seguir as instruções de instalação, atualizar seu arquivo de configuração e pronto.
Spatie é uma agência de webdesign com sede em Antuérpia, Bélgica. Você encontrará uma visão geral de todos os nossos projetos de código aberto em nosso site.
Investimos muitos recursos na criação dos melhores pacotes de código aberto. Você pode nos apoiar comprando um de nossos produtos pagos.
Agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando qual(is) de nossos pacotes você está usando. Você encontrará nosso endereço em nossa página de contato. Publicamos todos os cartões postais recebidos em nosso mural virtual de cartões postais.
Você pode instalar o pacote via compositor:
composer require spatie/laravel-feed
Registre as rotas nas quais os feeds serão exibidos usando a macro feeds
.
// In routes/web.php
Route:: feeds ();
Opcionalmente, você pode passar uma string como primeiro argumento da macro. A string será usada como prefixo de URL para todos os feeds configurados.
Em seguida, você deve publicar o arquivo de configuração:
php artisan feed:install
Aqui está o que parece:
return [
' feeds ' => [
' main ' => [
/*
* Here you can specify which class and method will return
* the items that should appear in the feed. For example:
* [AppModel::class, 'getAllFeedItems']
*
* You can also pass an argument to that method. Note that their key must be the name of the parameter: *
* [AppModel::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 ' => '' ,
],
],
];
Opcionalmente, você pode publicar os arquivos de visualização:
php artisan vendor:publish --provider= " SpatieFeedFeedServiceProvider " --tag= " feed-views "
Imagine que você tem um modelo chamado NewsItem
que contém registros que você deseja exibir no feed.
Primeiro você deve implementar a interface Feedable
nesse modelo. Feedable
espera um método: toFeedItem
, que deve retornar uma instância 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 );
}
}
Se preferir, retornar um array associativo com as chaves necessárias também resolverá o problema.
// 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 ,
]);
}
}
A seguir, você terá que criar um método que retornará todos os itens que devem ser exibidos no feed. Você pode nomear esse método como quiser e fazer qualquer consulta que desejar.
// app/NewsItem.php
public static function getFeedItems ()
{
return NewsItem:: all ();
}
Finalmente, você deve colocar o nome da sua classe e a URL onde deseja que o feed seja renderizado no arquivo de configuração:
// 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:
* 'AppModel@getAllFeedItems'
* or
* ['AppModel', 'getAllFeedItems']
*
* You can also pass an argument to that method. Note that their key must be the name of the parameter: *
* ['AppModel@getAllFeedItems', 'parameterName' => 'argument']
* or
* ['AppModel', 'getAllFeedItems', 'parameterName' => 'argument']
*/
' items ' => ' AppNewsItem@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 ' ,
],
],
];
A chave items
deve apontar para um método que retorne um dos seguintes:
Feedable
sFeedItem
s Este pacote fornece, pronto para uso, a visualização feed::feed
que exibe os detalhes de seus feeds.
No entanto, você pode usar uma visualização personalizada por feed, fornecendo uma chave view
dentro da configuração do seu feed.
No exemplo a seguir, estamos usando o feed News
anterior com uma visualização feeds.news
personalizada (localizada em resources/views/feeds/news.blade.php
):
// config/feed.php
return [
' feeds ' => [
' news ' => [
' items ' => [ ' AppNewsItem ' , ' 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 ' ,
],
],
];
Para descobrir um feed, os leitores de feed procuram uma tag na seção principal de seus documentos HTML semelhante a esta:
< link rel =" alternate " type =" application/atom+xml " title =" News " href =" /feed " >
Você pode adicionar isso ao seu <head>
através de uma visualização parcial.
@ include ( ' feed::links ' )
Como alternativa, você pode usar este componente blade:
< x-feed-links />
composer test
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
Consulte CONTRIBUINDO para obter detalhes.
Revise nossa política de segurança sobre como relatar vulnerabilidades de segurança.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.