如何构建联合提要
概述
无论您的应用程序是列出帖子、图片、新闻、问题还是其他内容,如果更新率高于每月一次,您必须为用欧宝平台是合法的吗户提供联合提要(RSS、Atom等),以便他们可以从提要聚合器中了解您的网站的最新情况。好消息是,如果以正欧宝平台是合法的吗确的方式构建对象模型,开发这一功能只需要几行代码,因为symfony提供了一个提要构建器插件,可以为您完成所有的工作。ob娱乐下载
简介
本章探索的示例是一个简单的博客应用程序帖子
和一个作者
表:
帖子 | 作者 |
---|---|
id | id |
author_id | first_name |
标题 | last_name |
描述 | 电子邮件 |
身体 | |
created_at |
的帖子
类扩展为getStrippedTitle ()
方法,将标题转换为一个可以在URI中使用的字符串,用破折号替换空格,用小写替换大写,并删除所有特殊字符:
公共函数getStrippedTitle(){美元的文本=函数(这个美元->getTitle());//删除所有非单词字符美元的文本=preg_replace(' /\ W/ ',' ',美元的文本);//用破折号替换所有空白部分美元的文本=preg_replace(' /\+ / ',“- - -”,美元的文本);//修饰破折号美元的文本=preg_replace(' /\ -美元/ ',”,美元的文本);美元的文本=preg_replace(' / ^\ -/ ',”,美元的文本);返回美元的文本;}
的作者
类由自定义扩展- > getName ()
方法如下:
公共函数getName(){返回这个美元->getFirstName().' '.这个美元->getLastName()}
如果需要关于扩展模型的方法的更多详细信息,请参阅第八章.
的routing.yml
包含以下规则:
发布:url: /permalink/:stripped_title参数:{模块:发布,动作:读}
如果您需要路由系统的更多详细信息,请参见第九章.
一个特殊的饲料
模块是为该场合构建的,所有的动作和模板都将放置在其中。
myob娱乐下载app的初始化模块
预期的结果
提要操作必须输出一个原子饲料。为了提醒您Atom提要中需要包含的所有信息,下面是一个示例:
<?xml版本=“1.0”编码=“utf - 8”? ><饲料xmlns=“http://www.w3.org/2005/Atom”><标题>鼠标博客< /名称><链接href=“http://www.myblog.com/”/><更新>2005 - 12 - 11 - t16:23:51z< /更新><作者><名称>彼得·克莱夫。< /名称>< author_email>pclive@myblog.com< / author_email>< /作者>< id>4543年d55ff756g734< / id><条目><标题>我喜欢老鼠< /名称><链接href=“http://www.myblog.com/permalink/i-love-mice”/>< id>i-love-mice< / id><作者><名称>彼得·克莱夫。< /名称>< author_email>pclive@myblog.com< / author_email>< /作者><更新>2005 - 12 - 11 - t16:23:51z< /更新><总结>自从我买了第一个鼠标,我就离不开它了。< /总结>< /条目><条目><标题>老鼠比鱼好< /名称><链接href=“http://www.myblog.com/permalink/a-mouse-is-better-than-a-fish”/>< id>a-mouse-is-better-than-a-fish< / id><作者><名称>鲍勃•沃尔特< /名称>< author_email>bwalter@myblog.com< / author_email>< /作者><更新>2005 - 12 - 09 - t09:11:42z< /更新><总结>我养了一条鱼四年,现在我病了。他们的气味。< /总结>< /条目>< /饲料>
安装插件
ob娱乐下载Symfony提供了一个sfFeed
自动生成大部分提要的插件。要安装它,使用symfony命令行:ob娱乐下载
$ ob娱乐下载symfony plugin-install http://plugins.symfony-project.com/sfFeedPlugin
类中安装插件的类插件/
目录中。为了让symfob娱乐下载ony自动加载它们,你需要清除配置缓存:
$ ob娱乐下载symfony cc
如果您想了解更多关于插件、它们如何扩展框架以及如何将跨多个项目使用的特性打包到一个插件中的信息,请参阅第十七章交响乐书的。ob娱乐下载
手动构建提要
在饲料
模块,创建一个lastPosts
行动:
公共函数executeLastPosts(){美元的饲料= sfFeed::newInstance(“atom1”);美元的饲料->setTitle(“鼠标博客”);美元的饲料->setLink(“http://www.myblog.com/”);美元的饲料->setAuthorEmail(“pclive@myblog.com”);美元的饲料->setAuthorName(“彼得·克莱夫。”);$ c=新标准;$ c->addDescendingOrderByColumn(PostPeer::CREATED_AT);$ c->setLimit(5);美元的帖子= PostPeer::doSelect($ c);foreach(美元的帖子作为美元的帖子){美元的项目=新sfFeedItem();美元的项目->setFeedTitle(美元的帖子->getTitle());美元的项目->setFeedLink(“@permalink ?stripped_title = '.美元的帖子->getStrippedTitle());美元的项目->setFeedAuthorName(美元的帖子->getAuthor()->getName());美元的项目->setFeedAuthorEmail(美元的帖子->getAuthor()->getEmail());美元的项目->setFeedPubdate(美元的帖子->getCreatedAt(“U”));美元的项目->setFeedUniqueId(美元的帖子->getStrippedTitle());美元的项目->setFeedDescription(美元的帖子->getDescription());美元的饲料->addItem(美元的项目);}这个美元->饲料=美元的饲料;}
最初的工厂方法的实例sfFeed
类的'Atom'格式。的sfFeed
而且sfFeedItem
类是symfony附加组ob娱乐下载件,专门用于提要构造。在动作的最后,美元的饲料
变量包含sfFeed
对象,该对象包括sfFeedItem
对象。要将对象转换为实际的Atom提要,可以使用lastPostsSuccess.php
模板简单地包含:
<?php回声美元的饲料->getFeed()? >
模板不能被布局装饰。此外,生成的页面必须声明为text / xml
内容类型。加上aview.yml
在饲料
模块配置/
目录:
所有:has_layout: off http_metas: content-type: text/xml
当从提要聚合器调用时,操作的结果现在恰好是上面描述的Atom提要:
http://www.myblog.com/feed/lastPosts
使用短语法
使用所有用于项构造的setter可能有点烦人,因为有很多信息需要定义。ob娱乐下载Symfony提供了一个简短的语法,使用一个关联数组来产生同样的效果:
公共函数executeLastPosts(){美元的饲料= sfFeed::newInstance(“atom1”);美元的饲料->setTitle(“鼠标博客”);美元的饲料->setLink(“http://www.myblog.com/”);美元的饲料->setAuthorEmail(“pclive@myblog.com”);美元的饲料->setAuthorName(“彼得·克莱夫。”);$ c=新标准;$ c->addDescendingOrderByColumn(PostPeer::CREATED_AT);$ c->setLimit(5);美元的帖子= PostPeer::doSelect($ c);foreach(美元的帖子作为美元的帖子){美元的项目=数组(“标题”= >美元的帖子->getTitle(),“链接”= >“@permalink ?stripped_title = '.美元的帖子->getStrippedTitle(),“authorName”= >美元的帖子->getAuthor()->getName(),“authorEmail”= >美元的帖子->getAuthor()->getEmail(),“发布日期”= >美元的帖子->getCreatedAt(),“uniqueId”= >美元的帖子->getStrippedTitle(),“描述”= >美元的帖子->getDescription(),);美元的饲料->addItemFromArray(美元的项目);}这个美元->饲料=美元的饲料;}
它具有完全相同的效果,但语法更清晰。
让symob娱乐下载fony替你做吧
由于用于构建新闻字段的方法名或多或少总是相同的,symfony可以完全像上面那样只用:ob娱乐下载欧宝平台是合法的吗
公共函数executeLastPosts(){美元的饲料= sfFeed::newInstance(“atom1”);美元的饲料->setTitle(“鼠标博客”);美元的饲料->setLink(“http://www.myblog.com/”);美元的饲料->setAuthorEmail(“pclive@myblog.com”);美元的饲料->setAuthorName(“彼得·克莱夫。”);$ c=新标准;$ c->addDescendingOrderByColumn(PostPeer::CREATED_AT);$ c->setLimit(5);美元的帖子= PostPeer::doSelect($ c);美元的饲料->setFeedItemsRouteName(“@permalink”);美元的饲料->setItems(美元的帖子);这个美元->饲料=美元的饲料;}
这难道不是纯粹的魔法吗?
神奇的是sfFeed
对象
的getter函数帖子
对象是如此清晰,甚至symfony也能理解它们。ob娱乐下载那是因为sfFeed
类具有内置机制,可以从组织良好的类中推导出相关信息:
要设置项
标题
,它寻找一个getFeedTitle ()
,一个getTitle ()
,一个getName ()
或者一个__toString ()
方法。在本例中,
帖子
对象具有getName ()
方法。设置
链接
,它将查找提要项路由名(由setFeedItemsRouteName ()
调用)。如果有,它会在路由url中查找参数,它可以在对象方法中找到getter。如果不是,它会寻找getFeedLink ()
,getLink ()
,getUrl ()
方法。在本例中,在动作(
@permalink
).路由规则包含: stripped_title
参数和帖子
对象具有getStripped_Title ()
方法,因此sfFeed
对象可以定义要链接到的uri。要设置作者的电子邮件,它会寻找
getFeedAuthorEmail
或者一个getAuthorEmail
.如果没有这样的方法,它会寻找getAuthor ()
,getUser ()
或getPerson ()
方法。如果返回的结果是一个对象,则在该对象中查找agetEmail
或者一个getMail
方法。在本例中,
帖子
对象具有getAuthor ()
,以及作者
对象具有getName ()
.同样的规则也用于作者的姓名和URL。要设置发布日期,它将查找
getFeedPubdate ()
,getPubdate ()
,getCreatedAt ()
或者一个获取当前日期()
方法。在本例中,
帖子
对象具有getCreatedAt
Atom提要的其他可能字段(包括类别、摘要、惟一id等)也是如此,建议您这样做的源文件sfFeed
类发现所有的演绎机制。
总而言之,访问器的方式帖子
而且作者
对象的内置快捷方式sfFeed
工作,和创建提要是如此简单。
为提要定义自定义值
在上面的列表中,您可以看到sfFeed
对象查找的始终是agetFeedXXX ()
.这允许您通过简单地扩展模型来为提要项的每个字段指定自定义值。
例如,如果您不希望作者的电子邮件在提要中发布,只需添加以下内容getFeedAuthorEmail ()
方法。帖子
对象:
公共函数getFeedAuthorEmail(){返回”;}
此方法将找到之前的getAuthor ()
方法,并且提要不会透露发布者的电子邮件地址。
使用其他格式
下面描述的方法可以转换为构建其他RSS提要。简单地改变给饲料工厂的参数:
// RSS 0.91美元的饲料= sfFeed::newInstance(“rssUserland091”);// RSS 2.01美元的饲料= sfFeed::newInstance(“rss201rev2”);
本作品采用创作共用署名-非商业性-禁止派生作品3.0未移植许可协议授权。