<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>4's symfony blog &#187; QRcodePlugin</title>
	<atom:link href="http://www.foolbirds.com/t/qrcodeplugin/feed" rel="self" type="application/rss+xml" />
	<link>http://www.foolbirds.com</link>
	<description>all about symfony</description>
	<lastBuildDate>Tue, 17 Aug 2010 01:22:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>发布你的symfony插件</title>
		<link>http://www.foolbirds.com/publish-a-symfony-plugin.html</link>
		<comments>http://www.foolbirds.com/publish-a-symfony-plugin.html#comments</comments>
		<pubDate>Fri, 16 Jan 2009 10:08:18 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[QRcodePlugin]]></category>
		<category><![CDATA[插件]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=370</guid>
		<description><![CDATA[《symfony插件编写一例:QRcodePlugin》一文中我们编写了一个用来生成QRcode 的symfony插件, 本文我们将会将QRcodePlugin发布到symfony官方的插件库(http://www.symfony-project.org/plugins/).
发布插件的程序比较繁琐, 方便起见我们使用一款插件来辅助我们发布插件 sfTaskExtraPlugin, 该插件扩展了symfony命令, 使用generate:plugin可以生成插件的基本目录结构, plugin:package命令来帮助我们将插件打包.
接下来是最复杂的地方, symfony是通过PEAR来进行packages管理的, 所以我们要将插件打成一个PEAR package. 一个发布到官方插件库的插件需要有一个LICENSE和一个README, 这两个文件要放在插件根目录下. README里需要写插件的说明和使用方法, README 使用 Markdown format, LICENSE文件是许可协议, symfony支持MIT, BSD, LGPL, 和PHP协议.
一个package包括package.xml和源代码, package.xml里对插件进行了详细的描述, 包括目录结构, 插件版本, 更新记录等等. 关于该文件的详细说明请参考PEAR package syntax(http://pear.php.net/manual/en/guide-developers.php)
由于package.xml结构复杂, 所以不做过多的讲解, 我们使用前面介绍过的plugin:package命令来生成package.xml.
$./symfony plugin:package QRcodePlugin&#62; Summarize your plugin in one line:用一行文字对插件进行简单的描述
$create QR code image&#62; Lead developer name:主要开发者的名字
$maker&#62; Lead developer email主要开发者的邮箱
$****@gmail.com&#62; Lead developer username:主要开发者的symfony帐号, 没有去这里注册 http://www.symfony-project.org/user/new
$m4ker&#62; Plugin [...]]]></description>
			<content:encoded><![CDATA[<p>《<a href="http://www.foolbirds.com/write-symfony-qrcode-plugin.html">symfony插件编写一例:QRcodePlugin</a>》一文中我们编写了一个用来生成<a href="http://www.symfony-project.org/plugins/QRcodePlugin">QRcode</a> 的symfony插件, 本文我们将会将QRcodePlugin发布到<a href="http://www.symfony-project.org/">symfony</a>官方的插件库(<a href="http://www.symfony-project.org/plugins/">http://www.symfony-project.org/plugins/</a>).</p>
<p>发布插件的程序比较繁琐, 方便起见我们使用一款插件来辅助我们发布插件 <a href="http://www.symfony-project.org/plugins/sfTaskExtraPlugin">sfTaskExtraPlugin</a>, 该插件扩展了symfony命令, 使用generate:plugin可以生成插件的基本目录结构, plugin:package命令来帮助我们将插件打包.</p>
<p>接下来是最复杂的地方, symfony是通过<a href="http://pear.php.net">PEAR</a>来进行packages管理的, 所以我们要将插件打成一个PEAR package. 一个发布到官方插件库的插件需要有一个LICENSE和一个README, 这两个文件要放在插件根目录下. README里需要写插件的说明和使用方法, README 使用 <a href="http://daringfireball.net/projects/markdown/syntax">Markdown format</a>, LICENSE文件是许可协议, symfony支持MIT, BSD, LGPL, 和PHP协议.</p>
<p>一个package包括package.xml和源代码, package.xml里对插件进行了详细的描述, 包括目录结构, 插件版本, 更新记录等等. 关于该文件的详细说明请参考<a href="http://pear.php.net/manual/en/guide-developers.php">PEAR package syntax</a>(<a href="http://pear.php.net/manual/en/guide-developers.php">http://pear.php.net/manual/en/guide-developers.php</a>)</p>
<p>由于package.xml结构复杂, 所以不做过多的讲解, 我们使用前面介绍过的plugin:package命令来生成package.xml.<br />
<code>$./symfony plugin:package QRcodePlugin</code><code>&gt; Summarize your plugin in one line:</code>用一行文字对插件进行简单的描述<br />
<code>$create QR code image</code><code>&gt; Lead developer name:</code>主要开发者的名字<br />
<code>$maker</code><code>&gt; Lead developer email</code>主要开发者的邮箱<br />
<code>$****@gmail.com</code><code>&gt; Lead developer username:</code>主要开发者的symfony帐号, 没有去这里注册 http://www.symfony-project.org/user/new<br />
<code>$m4ker</code><code>&gt; Plugin version number (i.e. "1.0.5"):</code>package版本号<br />
<code>$0.0.1</code><code>&gt; Plugin stability:</code>发布状态, 这里注意1.0.0一下能使用alpha和beta, 1.0.0以上可以使用stable, 再具体就没有研究了.<br />
<code>$beta</code>运行完毕会生成一个QRcodePlugin-0.0.1.tgz, 但是这个文件是不能直接上传到插件库中的, 因为package.xml中没有changelog.我们把包打开, 编辑package.xml<br />
<code>$tar zxf QRcodePlugin-0.0.1.tgz</code><code>$vi package.xml</code>找到</p>
<p><code>&lt;changelog /&gt;</code></p>
<p>替换成</p>
<p><code>&lt;changelog&gt;<br />
&lt;release&gt;<br />
&lt;version&gt;<br />
&lt;release&gt;0.0.1&lt;/release&gt;<br />
&lt;api&gt;0.0.1&lt;/api&gt;<br />
&lt;/version&gt;<br />
&lt;stability&gt;<br />
&lt;release&gt;beta&lt;/release&gt;<br />
&lt;api&gt;beta&lt;/api&gt;<br />
&lt;/stability&gt;<br />
&lt;license uri="http://www.symfony-project.com/license"&gt;<br />
MIT license<br />
&lt;/license&gt;<br />
&lt;date&gt;2009-1-16&lt;/date&gt;<br />
&lt;license&gt;MIT&lt;/license&gt;<br />
&lt;notes&gt;<br />
* maker: First release of the plugin<br />
&lt;/notes&gt;<br />
&lt;/release&gt;<br />
&lt;/changelog&gt;</code></p>
<p>然后再原样打包<br />
<code>$tar zcf QRcodePlugin-0.0.1.tgz QRcodePlugin-0.0.1/ package.xml</code>这样我们就生成了一个可以上传到官方插件库的package了, 接下来呢, 我们要去symfony 官方网站创建一个Plugin, 如果你没有帐号, 要先创建一个帐号.</p>
<p><a href="http://www.symfony-project.org/user/new">http://www.symfony-project.org/user/new</a></p>
<p><img class="aligncenter size-full wp-image-387" title="screenshot-11" src="http://www.foolbirds.com/wp-content/uploads/2009/01/screenshot-11.png" alt="screenshot-11" width="463" height="717" /></p>
<p>然后登录到 plugin system(<a href="http://www.symfony-project.org/plugins/">http://www.symfony-project.org/plugins/</a>)中.</p>
<p><img class="aligncenter size-full wp-image-388" title="screenshot-2" src="http://www.foolbirds.com/wp-content/uploads/2009/01/screenshot-2.png" alt="screenshot-2" width="315" height="501" />Create a new plugin 进入插件创建页面(<a href="http://www.symfony-project.org/plugins/new">http://www.symfony-project.org/plugins/new</a>)</p>
<p><img class="aligncenter size-medium wp-image-389" title="screenshot-5" src="http://www.foolbirds.com/wp-content/uploads/2009/01/screenshot-5-300x219.png" alt="screenshot-5" width="300" height="219" />在创建页面我们需要填写</p>
<p style="padding-left: 30px;">插件名: QRcodePlugin</p>
<p style="padding-left: 30px;">是否加入插件库: 选中</p>
<p style="padding-left: 30px;">插件源地址: <a href="http://svn.symfony-project.com/plugins/QRcodePlugin">http://svn.symfony-project.com/plugins/QRcodePlugin</a></p>
<p style="padding-left: 30px;">插件主页: <a href="http://www.foolbirds.com">http://www.foolbirds.com</a></p>
<p style="padding-left: 30px;">Ticketing URL:</p>
<p style="padding-left: 30px;">选择支持哪种ORM?</p>
<p style="padding-left: 30px;">描述: &#8230;</p>
<p style="padding-left: 30px;">图片:</p>
<p style="padding-left: 30px;">分类:</p>
<p>填写完毕之后提交, 我们就创建了一个Plugin.然后我们来上传QRcodePlugin的第一个版本, 进入插件首页(<a href="http://www.symfony-project.org/plugins/QRcodePlugin">http://www.symfony-project.org/plugins/QRcodePlugin</a>)中的Admin页面.</p>
<p><img class="aligncenter size-full wp-image-390" title="screenshot-6" src="http://www.foolbirds.com/wp-content/uploads/2009/01/screenshot-6.png" alt="screenshot-6" width="699" height="414" /></p>
<p>在New Release表单中上传我们的QRcodePlugin-0.0.1.tgz</p>
<p><img class="aligncenter size-full wp-image-391" title="screenshot-7" src="http://www.foolbirds.com/wp-content/uploads/2009/01/screenshot-7.png" alt="screenshot-7" width="603" height="301" /></p>
<p>上传成功后我们会看到Releases中多了一项类似下面这样:</p>
<p><img class="aligncenter size-full wp-image-392" title="screenshot-8" src="http://www.foolbirds.com/wp-content/uploads/2009/01/screenshot-8.png" alt="screenshot-8" width="552" height="80" /></p>
<p>这样我们的插件就成功的加入到了官方插件库, 接下来我们使用官方方法测试一下是否可以安装.<br />
<code>$./symfony plugin:install QRcodePlugin --release=0.0.1</code><code>&gt;&gt; plugin&nbsp;&nbsp;&nbsp; installing plugin "QRcodePlugin"<br />
&gt;&gt; sfPearFrontendPlugin Attempting to discover channel "pear.symfony-project.com"...<br />
&gt;&gt; sfPearFrontendPlugin downloading channel.xml ...<br />
&gt;&gt; sfPearFrontendPlugin Starting to download channel.xml (663 bytes)<br />
&gt;&gt; sfPearFrontendPlugin .<br />
&gt;&gt; sfPearFrontendPlugin ...done: 663 bytes<br />
&gt;&gt; sfPearFrontendPlugin Auto-discovered channel "pear.symfony-project.com", alias<br />
&gt;&gt; sfPearFrontendPlugin "symfony", adding to registry<br />
&gt;&gt; sfPearFrontendPlugin Attempting to discover channel<br />
&gt;&gt; sfPearFrontendPlugin "plugins.symfony-project.org"...<br />
&gt;&gt; sfPearFrontendPlugin downloading channel.xml ...<br />
&gt;&gt; sfPearFrontendPlugin Starting to download channel.xml (639 bytes)<br />
&gt;&gt; sfPearFrontendPlugin ...done: 639 bytes<br />
&gt;&gt; sfPearFrontendPlugin Auto-discovered channel "plugins.symfony-project.org", alias<br />
&gt;&gt; sfPearFrontendPlugin "symfony-plugins", adding to registry<br />
&gt;&gt; sfPearFrontendPlugin downloading QRcodePlugin-0.0.3.tgz ...<br />
&gt;&gt; sfPearFrontendPlugin Starting to download QRcodePlugin-0.0.3.tgz (1,035,616 bytes)<br />
&gt;&gt; sfPearFrontendPlugin ...done: 1,035,616 bytes<br />
&gt;&gt; sfSymfonyPluginManager Installation successful for plugin "QRcodePlugin"<br />
&gt;&gt; sfSymfonyPluginManager Installing web data for plugin</code><code>$ls plugins</code><code>&gt;&gt;QRcodePlugin</code><br />
安装成功, 本文完.</p>
<ul class="related_post"><li><a href="http://www.foolbirds.com/install-uncompatible-symfony-plugin-and-use-sffeedplugin.html" title="symfony1.2使用1.0插件sfFeedPlugin一例">symfony1.2使用1.0插件sfFeedPlugin一例</a></li><li><a href="http://www.foolbirds.com/write-symfony-qrcode-plugin.html" title="symfony插件编写一例:QRcodePlugin">symfony插件编写一例:QRcodePlugin</a></li><li><a href="http://www.foolbirds.com/create-symfony-plugin.html" title="创建symfony插件">创建symfony插件</a></li><li><a href="http://www.foolbirds.com/use_symfony_filter_to_filteredurl.html" title="使用SYMFONY Filter 过滤URL">使用SYMFONY Filter 过滤URL</a></li><li><a href="http://www.foolbirds.com/%e4%bb%bfsymfony%e6%9c%ba%e5%88%b6%e5%ae%9e%e7%8e%b0%e4%b8%8d%e7%94%a8require%e6%88%96%e8%80%85include%e6%9d%a5%e5%ae%9e%e4%be%8b%e5%8c%96%e7%b1%bb.html" title="仿symfony机制实现不用require或者include来实例化类">仿symfony机制实现不用require或者include来实例化类</a></li><li><a href="http://www.foolbirds.com/use-datetime-in-php5-1-x-with-symfony.html" title="symfony1.4 DateTime对于PHP低版本的兼容问题">symfony1.4 DateTime对于PHP低版本的兼容问题</a></li><li><a href="http://www.foolbirds.com/%e5%a6%82%e4%bd%95%e5%9c%a8fixtures-yml%e5%86%99%e5%be%aa%e7%8e%af%e6%b7%bb%e5%8a%a0%e6%95%b0%e6%8d%ae.html" title="如何在fixtures.yml写循环添加数据">如何在fixtures.yml写循环添加数据</a></li><li><a href="http://www.foolbirds.com/symfony-1-4-database-utf8.html" title="symfony 1.4 数据库 utf8设置">symfony 1.4 数据库 utf8设置</a></li><li><a href="http://www.foolbirds.com/symfony-cheat-sheet.html" title="symfony cheat sheet">symfony cheat sheet</a></li><li><a href="http://www.foolbirds.com/cheat-sheets.html" title="Cheat Sheets!">Cheat Sheets!</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/publish-a-symfony-plugin.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
