RssController.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Repositories\ArticleRepositoryEloquent;
  4. use App\Repositories\SystemRepositoryEloquent;
  5. use Illuminate\Http\Request;
  6. use App\Http\Requests;
  7. use Rss;
  8. class RssController extends Controller
  9. {
  10. private $article;
  11. private $system;
  12. public function __construct(ArticleRepositoryEloquent $article, SystemRepositoryEloquent $system)
  13. {
  14. $this->article = $article;
  15. $this->system = $system;
  16. }
  17. public function index()
  18. {
  19. $title = $this->system->getKeyValue('title');
  20. $description = $this->stringFormat($this->system->getKeyValue('seo_desc'));
  21. $channel = [
  22. 'title' => $title,
  23. 'link' => route('rss'),
  24. 'description' => $description,
  25. ];
  26. $rss = Rss::channel($channel);
  27. $articles = $this->article->orderBy('id', 'desc')->simplePaginate(20);
  28. if ($articles) {
  29. foreach ($articles as $article) {
  30. $item = [
  31. 'title' => $article->title,
  32. 'description' => $this->stringFormat($article->desc),
  33. 'link' => route('article', ['id' => $article->id]),
  34. 'pubDate' => date('Y-m-d', strtotime($article->created_at))
  35. ];
  36. $rss->item($item);
  37. }
  38. }
  39. return response($rss, 200, ['Content-Type' => 'text/xml']);
  40. }
  41. private function stringFormat($string)
  42. {
  43. return sprintf("<![CDATA[%s]]>", $string);
  44. }
  45. }