承接 rumenx/php-feed 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

rumenx/php-feed

最新稳定版本:v1.0.2

Composer 安装命令:

composer require rumenx/php-feed

包简介

Framework-agnostic PHP Feed generator for Laravel, Symfony, and more.

README 文档

README

CI codecov PHP Version Require Latest Stable Version License

A modern, framework-agnostic PHP Feed generator for Laravel, Symfony, and any PHP project. Generate RSS and Atom feeds with full caching support and customizable views.

Features

  • ???? Framework Agnostic: Works with Laravel, Symfony, or any PHP project
  • ???? Multiple Formats: RSS 2.0 and Atom 1.0 support
  • Caching: Built-in caching support with framework adapters
  • ???? Custom Views: Use your own templates for feed generation
  • ???? Dependency Injection: Clean architecture with adapter pattern
  • 100% Test Coverage: Thoroughly tested with Pest
  • ???? PSR-12 Compliant: Follows modern PHP standards
  • ???? Type Safe: Full PHP 8.3+ type declarations

Requirements

  • PHP 8.3+
  • Composer

Installation

composer require rumenx/php-feed

Usage Examples

Laravel

Basic Usage:

use Rumenx\Feed\FeedFactory; class FeedController extends Controller { public function feed() { $feed = FeedFactory::create(); $feed->setTitle('My Blog Feed'); $feed->setDescription('Latest posts from my blog'); $feed->setLink('https://example.com'); $feed->addItem([ 'title' => 'First Post', 'author' => 'Rumen', 'link' => 'https://example.com/post/1', 'pubdate' => now(), 'description' => 'This is the first post.' ]); // Return XML string directly $xml = $feed->render('rss'); return response($xml, 200, [ 'Content-Type' => 'application/xml' ]); } }

Using Laravel Views (Optional):

For more control, you can use the included Blade templates:

use Rumenx\Feed\FeedFactory; class FeedController extends Controller { public function feed() { $feed = FeedFactory::create(); $feed->setTitle('My Blog Feed'); $feed->addItem([ 'title' => 'First Post', 'author' => 'Rumen', 'link' => 'https://example.com/post/1', 'pubdate' => now(), 'description' => 'This is the first post.' ]); // Get data for your own view template $items = $feed->getItems(); $channel = [ 'title' => $feed->getTitle(), 'description' => $feed->getDescription(), 'link' => $feed->getLink() ]; return response()->view('feed.rss', compact('items', 'channel'), 200, [ 'Content-Type' => 'application/xml' ]); } }

Symfony

Basic Usage:

use Rumenx\Feed\FeedFactory; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class FeedController extends AbstractController { public function feed(): Response { $feed = FeedFactory::create(); $feed->setTitle('My Blog Feed'); $feed->setDescription('Latest posts from my blog'); $feed->setLink('https://example.com'); $feed->addItem([ 'title' => 'First Post', 'author' => 'Rumen', 'link' => 'https://example.com/post/1', 'pubdate' => new \DateTime(), 'description' => 'This is the first post.' ]); // Return XML response $xml = $feed->render('atom'); return new Response($xml, 200, ['Content-Type' => 'application/xml']); } }

Using Symfony Views (Optional):

For more control, you can use Twig templates:

class FeedController extends AbstractController { public function feed(): Response { $feed = FeedFactory::create(); $feed->setTitle('My Blog Feed'); $feed->addItem([ 'title' => 'First Post', 'author' => 'Rumen', 'link' => 'https://example.com/post/1', 'pubdate' => new \DateTime(), 'description' => 'This is the first post.' ]); // Get data for your own Twig template $items = $feed->getItems(); $channel = [ 'title' => $feed->getTitle(), 'description' => $feed->getDescription(), 'link' => $feed->getLink() ]; return $this->render('feed/atom.xml.twig', [ 'items' => $items, 'channel' => $channel ], new Response('', 200, ['Content-Type' => 'application/xml'])); } }

Plain PHP / Other Frameworks

Simple Usage (Recommended):

require 'vendor/autoload.php'; use Rumenx\Feed\FeedFactory; // Create feed with simple built-in adapters $feed = FeedFactory::create(); $feed->setTitle('My Feed'); $feed->setDescription('Feed description'); $feed->setLink('https://example.com'); $feed->addItem([ 'title' => 'Hello World', 'author' => 'Rumen', 'link' => 'https://example.com/hello', 'pubdate' => date('c'), 'description' => 'Hello world post!' ]); // Output RSS feed header('Content-Type: application/xml'); echo $feed->render('rss');

Advanced - Custom Adapters:

You can provide your own implementations for cache, config, response, and view:

use Rumenx\Feed\Feed; $feed = new Feed([ 'cache' => new MyCacheAdapter(), 'config' => new MyConfigAdapter(), 'response' => new MyResponseAdapter(), 'view' => new MyViewAdapter(), ]); $feed->setTitle('My Feed'); $feed->addItem([ 'title' => 'Hello', 'author' => 'Rumen', 'link' => 'https://example.com/hello', 'pubdate' => date('c'), 'description' => 'Hello world!' ]); // Use render() for framework-specific response // or render() for XML string in plain PHP echo $feed->render('rss');

Development

Available Composer Scripts

# Run tests composer test # Run tests with coverage composer test:coverage # Run tests with HTML coverage report composer test:coverage-html # Watch tests (automatically re-run on file changes) composer test:watch # Static analysis with PHPStan composer analyse # Check code style (PSR-12) composer style # Fix code style automatically composer style:fix # Run all checks (tests + analysis + style) composer check # Run CI checks (coverage + analysis + style) composer ci

API Reference

Factory Method

// Create feed with simple adapters (recommended for most users) $feed = FeedFactory::create($config);

Core Methods

// Feed configuration $feed->setTitle(string $title): self $feed->setDescription(string $description): self $feed->setLink(string $link): self $feed->setDateFormat(string $format): self $feed->setLanguage(string $language): self // Item management $feed->addItem(array $item): self $feed->addItems(array $items): self // Rendering $feed->render(string $format = 'rss'): mixed // Returns framework-specific response or XML string // Caching $feed->isCached(string $key): bool $feed->clearCache(string $key): self

Architecture

This package follows a clean architecture pattern with dependency injection:

  • Feed: Core feed generator class
  • Adapters: Framework-specific implementations
    • FeedCacheInterface: Caching operations
    • FeedConfigInterface: Configuration access
    • FeedResponseInterface: HTTP response handling
    • FeedViewInterface: Template rendering

Support This Project

If you find this project useful, please consider supporting its development:

GitHub Sponsors

Other ways to support:

  • Star this repository
  • ???? Report bugs and suggest improvements
  • ???? Contribute code or documentation
  • ???? Make a donation - See FUNDING.md for details

Contributing

We welcome contributions! Please see our Contributing Guide for details.

Security

If you discover any security-related issues, please check our Security Policy.

License

This package is open-sourced software licensed under the MIT License.

Links

统计信息

  • 总下载量: 1.46k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 365
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 363
  • Watchers: 17
  • Forks: 94
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固