<?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</title>
	<atom:link href="http://www.foolbirds.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.foolbirds.com</link>
	<description>all about symfony</description>
	<lastBuildDate>Tue, 02 Feb 2010 09:33:41 +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>python3 判断 变量类型</title>
		<link>http://www.foolbirds.com/python3-is-typ.html</link>
		<comments>http://www.foolbirds.com/python3-is-typ.html#comments</comments>
		<pubDate>Tue, 02 Feb 2010 09:33:00 +0000</pubDate>
		<dc:creator>bobhero</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=1001</guid>
		<description><![CDATA[初学PYTHON3
想知道 如何 判断 一个变量 是否为 字串
试了了下  没有 isstring的函数
type(a) == &#8217;str&#8217;也不好用
查了一下手册发现
isinstance是好用的
用法如下
def isString(a)
return isinstance(a,str)
Random Posts

awesome 的 多头显示
在symfony中使用FCKeditor上传图片附件
Cheat Sheets!
symfony目录结构及部署办法说明
Add table prefix  in symfony－在symfony中使用表前缀
编写widget一例:支持Google Maps的坐标输入框
判断搜索引擎爬虫
关于cache
多语言翻译
开启symfony的CSRF保护

]]></description>
			<content:encoded><![CDATA[<p>初学PYTHON3</p>
<p>想知道 如何 判断 一个变量 是否为 字串</p>
<p>试了了下  没有 isstring的函数</p>
<p>type(a) == &#8217;str&#8217;也不好用</p>
<p>查了一下手册发现</p>
<p>isinstance是好用的</p>
<p>用法如下</p>
<p>def isString(a)</p>
<p>return isinstance(a,str)<br />
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
<li><a href="http://www.foolbirds.com/default-values-for-form.html" title="如何给表单项赋初值">如何给表单项赋初值</a></li>
<li><a href="http://www.foolbirds.com/csrf.html" title="开启symfony的CSRF保护">开启symfony的CSRF保护</a></li>
<li><a href="http://www.foolbirds.com/ubuntu-install-phpmyadmin-with-apt-get.html" title="Ubuntu apt-get方法安装phpmyadmin">Ubuntu apt-get方法安装phpmyadmin</a></li>
<li><a href="http://www.foolbirds.com/to-be-a-symfony-contributor.html" title="成为一名symfony文档贡献者.">成为一名symfony文档贡献者.</a></li>
<li><a href="http://www.foolbirds.com/symfony-fckeditory-and-upload-image.html" title="在symfony中使用FCKeditor上传图片附件">在symfony中使用FCKeditor上传图片附件</a></li>
<li><a href="http://www.foolbirds.com/use-helpers.html" title="使用helper加快视图开发">使用helper加快视图开发</a></li>
<li><a href="http://www.foolbirds.com/%e5%9c%a8layout%e4%b8%ad%e5%ba%94%e7%94%a8action%e5%ae%9a%e4%b9%89%e7%9a%84%e5%8f%98%e9%87%8f.html" title="在layout中应用action定义的变量">在layout中应用action定义的变量</a></li>
<li><a href="http://www.foolbirds.com/symfony-folder-and-deploy.html" title="symfony目录结构及部署办法说明">symfony目录结构及部署办法说明</a></li>
<li><a href="http://www.foolbirds.com/symfony-creadential.html" title="symfony 权限访问控制（多用户访问证书）">symfony 权限访问控制（多用户访问证书）</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/python3-is-typ.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>symfony 1.4 数据库 utf8设置</title>
		<link>http://www.foolbirds.com/symfony-1-4-database-utf8.html</link>
		<comments>http://www.foolbirds.com/symfony-1-4-database-utf8.html#comments</comments>
		<pubDate>Tue, 02 Feb 2010 09:30:52 +0000</pubDate>
		<dc:creator>bobhero</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[1.4]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=1099</guid>
		<description><![CDATA[symfony 1.4 更新好长时间了
也准备放弃 symfony1.2 改投 1.4
1.4照比 1.2有了很多更新 官方文档 我不是很满意，感觉有很多东西在文档上找不到全靠自己看代码 及 搜 英文blog
其中  symfony 1.4 对utf8  数据库的支持 我在 官方的文档中并没有找到好的例子 ，在英文blog中找到了一些个解决办法
如下

dsn:      sqlite:%SF_DATA_DIR%/database.db
username: root
password: 123456
attributes:
default_table_collate: utf8_general_ci
default_table_charset: utf8


symfony cheat sheet
Cheat Sheets!
symfony1.2下的命令行程序(batch)
后台模板结构
在Symfony中使用第三方图片处理工具WideImage
Add table prefix  in symfony－在symfony中使用表前缀
Symfony中的action和actions
跳并快乐着－symfony跳转指南
symfony数据表关联详解(for propel)
symfony命令行详解

]]></description>
			<content:encoded><![CDATA[<p>symfony 1.4 更新好长时间了</p>
<p>也准备放弃 symfony1.2 改投 1.4</p>
<p>1.4照比 1.2有了很多更新 官方文档 我不是很满意，感觉有很多东西在文档上找不到全靠自己看代码 及 搜 英文blog</p>
<p>其中  symfony 1.4 对utf8  数据库的支持 我在 官方的文档中并没有找到好的例子 ，在英文blog中找到了一些个解决办法<br />
如下<br />
<code><br />
dsn:      sqlite:%SF_DATA_DIR%/database.db<br />
username: root<br />
password: 123456<br />
attributes:<br />
default_table_collate: utf8_general_ci<br />
default_table_charset: utf8<br />
</code>
<ul class="related_post">
<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>
<li><a href="http://www.foolbirds.com/batch-in-symfony12.html" title="symfony1.2下的命令行程序(batch)">symfony1.2下的命令行程序(batch)</a></li>
<li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="后台模板结构">后台模板结构</a></li>
<li><a href="http://www.foolbirds.com/wideimage-in-symfony.html" title="在Symfony中使用第三方图片处理工具WideImage">在Symfony中使用第三方图片处理工具WideImage</a></li>
<li><a href="http://www.foolbirds.com/add-table-prefix-in-symfony.html" title="Add table prefix  in symfony－在symfony中使用表前缀">Add table prefix  in symfony－在symfony中使用表前缀</a></li>
<li><a href="http://www.foolbirds.com/symfony%e4%b8%ad%e7%9a%84action%e5%92%8cactions.html" title="Symfony中的action和actions">Symfony中的action和actions</a></li>
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
<li><a href="http://www.foolbirds.com/symfony-references-with-propel.html" title="symfony数据表关联详解(for propel)">symfony数据表关联详解(for propel)</a></li>
<li><a href="http://www.foolbirds.com/symfony-cmd.html" title="symfony命令行详解">symfony命令行详解</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/symfony-1-4-database-utf8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开发技巧总结</title>
		<link>http://www.foolbirds.com/2010-1-20%e5%bc%80%e5%8f%91%e6%8a%80%e5%b7%a7%e6%80%bb%e7%bb%93.html</link>
		<comments>http://www.foolbirds.com/2010-1-20%e5%bc%80%e5%8f%91%e6%8a%80%e5%b7%a7%e6%80%bb%e7%bb%93.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 02:39:19 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[vi/vim]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[技巧]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=938</guid>
		<description><![CDATA[很久以前保存在草稿里的一些开发技巧，整理发表出来。
1. php格式化数字
echo number_format(123456789);
运行结果 123,456,789
2. html中的分页符号
需要使用css  ，这是有关打印的一些css属性
属性   版本   兼容性   继承性   简介
page   CSS2   IE5.5+   有           检索或指定显示对象容器时使用的页面类型（pagetype）。参阅@page规则
page-break-after   CSS2   IE4+   无   检索或设置对象后出现的页分割符
page-break-before   CSS2  [...]]]></description>
			<content:encoded><![CDATA[<p>很久以前保存在草稿里的一些开发技巧，整理发表出来。</p>
<p>1. php格式化数字</p>
<p style="padding-left: 30px;">echo number_format(123456789);</p>
<p style="padding-left: 30px;">运行结果 123,456,789</p>
<p>2. html中的分页符号</p>
<p style="padding-left: 30px;">需要使用css  ，这是有关打印的一些css属性</p>
<p style="padding-left: 30px;">属性   版本   兼容性   继承性   简介<br />
page   CSS2   IE5.5+   有           检索或指定显示对象容器时使用的页面类型（pagetype）。参阅@page规则<br />
page-break-after   CSS2   IE4+   无   检索或设置对象后出现的页分割符<br />
page-break-before   CSS2   IE4+   无   检索或设置对象前出现的页分割符<br />
page-break-inside   CSS2   NONE   有   检索或设置对象容器中出现的页分割符<br />
marks   CSS2   NONE   无   设置或检索什么样的标志是应该在页容器外边被给予<br />
orphans   CSS2   NONE   有   设置或检索对象内容内一定要留在一页范围底端以内的行的最少数量<br />
size   CSS2   NONE   有   检索或指定页面规格的调整<br />
widows   CSS2   NONE   有   检索或指定一定要留在页面顶部的行数</p>
<p>3. js replace 替换全部</p>
<p style="padding-left: 30px;">from.value.replace(/\-/g,&#8217;/')</p>
<p>4. SSH免登陆</p>
<p style="padding-left: 30px;">ssh-keygen -t rsa</p>
<p style="padding-left: 30px;">ssh-copy-id user@IP</p>
<p style="padding-left: 30px;">上面的命令和下面操作相同</p>
<p style="padding-left: 30px;">ssh-keygen -t rsa 或 ssh-keygen -d (dsa) =&gt; 产生出 id_rsa, id_rsa.pub</p>
<p style="padding-left: 30px;">scp .ssh/id_rsa.pub root@192.168.1.102:~/.ssh/</p>
<p style="padding-left: 30px;">ssh root@192.168.1.102</p>
<p style="padding-left: 30px;">cat .ssh/id_rsa.pub &gt;&gt; .ssh/authorized_keys 即可</p>
<p>5. scp(SSH copy) 例子</p>
<p style="padding-left: 30px;">scp root@192.168.1.102:~/filename ./</p>
<p style="padding-left: 30px;">scp ./filename root@192.168.1.102:~/</p>
<p>6. vim下输出Windows换行符^M使用Ctrl+v然后回车。</p>
<p>7. 只修改目录或者文档的权限</p>
<p style="padding-left: 30px;">在当前目录下递归修改文件权限</p>
<p style="padding-left: 30px;">find . -type f -exec chmod 0600 {} \;</p>
<p style="padding-left: 30px;">在当前目录下递归修改目录权限<br />
find . -type d -exec chmod 0755 {} \;</p>
<p>8. 命令行下的技巧</p>
<p style="padding-left: 30px;">Ctrl-R 通过关键字匹配最近执行过的命令</p>
<p style="padding-left: 30px;">Ctrl-A可将光标移动到命令行行首</p>
<p style="padding-left: 30px;">Ctrl-E可将光标移动到命令行行尾</p>
<p style="padding-left: 30px;">Ctrl-W快捷键可以快速删除光标前的字符</p>
<p style="padding-left: 30px;">Ctrl-K可以立即删除光标后的字符</p>
<p style="padding-left: 30px;">Ctrl-Y取消删除操作</p>
<p style="padding-left: 30px;">Ctrl-P查找上一条命令，等于光标上键</p>
<p style="padding-left: 30px;">Ctrl-N查找下一条命令，等于光标下键</p>
<p style="padding-left: 30px;">Ctrl-F向右移动光标</p>
<p style="padding-left: 30px;">Ctrl-B向左移动光标</p>
<p>9. 关于历史记录的技巧</p>
<p style="padding-left: 30px;">history查看当前用户执行过的命令</p>
<p style="padding-left: 30px;">!编号 重复执行命令</p>
<p style="padding-left: 30px;">!! 重复上一条命令</p>
<p style="padding-left: 30px;">!keyword 使用关键字匹配最近一条命令并执行，类似Ctrl+R</p>
<p>10. 在vim中执行命令</p>
<p style="padding-left: 30px;">:!ls</p>
<p>11. vim录制宏</p>
<p style="padding-left: 30px;">qa开始录制，a为宏的名称，可以定义a-z一共26个宏</p>
<p style="padding-left: 30px;">录制完毕按q结束录制</p>
<p style="padding-left: 30px;">@a执行名称为a的宏</p>
<p style="padding-left: 30px;">12@a执行名称为a的宏12次</p>
<p style="padding-left: 30px;">宏设置完毕会被保留，也就是说无论关闭vim或者重启计算机宏依然可以生效。</p>
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="后台模板结构">后台模板结构</a></li>
<li><a href="http://www.foolbirds.com/add-tinymce-to-symfony.html" title="在symfony项目中应用TinyMCE">在symfony项目中应用TinyMCE</a></li>
<li><a href="http://www.foolbirds.com/batch-in-symfony12.html" title="symfony1.2下的命令行程序(batch)">symfony1.2下的命令行程序(batch)</a></li>
<li><a href="http://www.foolbirds.com/python3-is-typ.html" title="python3 判断 变量类型">python3 判断 变量类型</a></li>
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
<li><a href="http://www.foolbirds.com/freebsd710-install-lamp-with-ports.html" title="FreeBSD7.10通过ports安装lamp">FreeBSD7.10通过ports安装lamp</a></li>
<li><a href="http://www.foolbirds.com/admin-generator-list-display.html" title="在admin generator中加入复杂的自定义列">在admin generator中加入复杂的自定义列</a></li>
<li><a href="http://www.foolbirds.com/awesome_dual_screen.html" title="awesome 的 多头显示">awesome 的 多头显示</a></li>
<li><a href="http://www.foolbirds.com/how-to-embed-forms-in-symfony-12-admin-generator.html" title="内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）">内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）</a></li>
<li><a href="http://www.foolbirds.com/publish-a-symfony-plugin.html" title="发布你的symfony插件">发布你的symfony插件</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/2010-1-20%e5%bc%80%e5%8f%91%e6%8a%80%e5%b7%a7%e6%80%bb%e7%bb%93.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>打鸟游戏修改版</title>
		<link>http://www.foolbirds.com/1072.html</link>
		<comments>http://www.foolbirds.com/1072.html#comments</comments>
		<pubDate>Fri, 06 Nov 2009 05:14:27 +0000</pubDate>
		<dc:creator>heroduandi</dc:creator>
				<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=1072</guid>
		<description><![CDATA[在网上偶然看到了这款打鸟的Flash游戏，体验了一下，感觉创意和游戏性方面都还不错，不过刚才玩的时候不容易过关（有点不爽）。本着一惯的要对游戏负责的态度决定试着修改一下。最好是在游戏开始时就有足够多的钱，这样可以买所有武器和弹药。let&#8217;s go.破解Flash当然首选硕思闪精灵了，在硕思里打开swf导出为fla在Flash中打开,F9打开代码窗口,找到money改成想要的数值，OK 了。这么简单自己也没想到，问了高手才知道，可以修改很多属性，比如导弹的发射速度，现在这个版本导弹的发射速度已经修改了（有了这个想不通关也难），关于修改的具体细节正在整理中，敬请期待。

Random Posts

symfony cheat sheet
在Ubuntu下面，让symfony工作起来
内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）
成为一名symfony文档贡献者.
多语言翻译
使用helper加快视图开发
注释例子
Criteria详解
python3 判断 变量类型
symfony 1.4 数据库 utf8设置

]]></description>
			<content:encoded><![CDATA[<p>在网上偶然看到了这款打鸟的Flash游戏，体验了一下，感觉创意和游戏性方面都还不错，不过刚才玩的时候不容易过关（有点不爽）。本着一惯的要对游戏负责的态度决定试着修改一下。最好是在游戏开始时就有足够多的钱，这样可以买所有武器和弹药。let&#8217;s go.破解Flash当然首选硕思闪精灵了，在硕思里打开swf导出为fla在Flash中打开,F9打开代码窗口,找到money改成想要的数值，OK 了。这么简单自己也没想到，问了高手才知道，可以修改很多属性，比如导弹的发射速度，现在这个版本导弹的发射速度已经修改了（有了这个想不通关也难），关于修改的具体细节正在整理中，敬请期待。<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="390" height="600" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.foolbirds.com/wp-content/uploads/2009/11/damnbirds11.swf" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="390" height="600" src="http://www.foolbirds.com/wp-content/uploads/2009/11/damnbirds11.swf" quality="high"></embed></object><br />
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/how-to-install-symfony12-in-windows.html" title="如何在WINDOWS下设置SYMFONY1.2">如何在WINDOWS下设置SYMFONY1.2</a></li>
<li><a href="http://www.foolbirds.com/%e5%88%a4%e6%96%ad%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%88%ac%e8%99%ab.html" title="判断搜索引擎爬虫">判断搜索引擎爬虫</a></li>
<li><a href="http://www.foolbirds.com/python3-is-typ.html" title="python3 判断 变量类型">python3 判断 变量类型</a></li>
<li><a href="http://www.foolbirds.com/add-link-as-action-in-list.html" title="如何在List表单下面添加 链接 式动作 类似与新建">如何在List表单下面添加 链接 式动作 类似与新建</a></li>
<li><a href="http://www.foolbirds.com/%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6%e5%b7%a5%e5%85%b7git%e7%9a%84%e4%bd%bf%e7%94%a8%ef%bc%88%e4%ba%8c%ef%bc%89%e4%b8%bb%e6%9c%ba%e6%89%93%e8%a1%a5%e4%b8%81.html" title="版本控制工具GIT的使用（二）主机打补丁">版本控制工具GIT的使用（二）主机打补丁</a></li>
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
<li><a href="http://www.foolbirds.com/2010-1-20%e5%bc%80%e5%8f%91%e6%8a%80%e5%b7%a7%e6%80%bb%e7%bb%93.html" title="开发技巧总结">开发技巧总结</a></li>
<li><a href="http://www.foolbirds.com/use-orm-propel.html" title="关于数据查询的使用">关于数据查询的使用</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/firefox-and-ie-pressup.html" title="Firefox 和 IE 中的键盘事件">Firefox 和 IE 中的键盘事件</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/1072.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>symfony cheat sheet</title>
		<link>http://www.foolbirds.com/symfony-cheat-sheet.html</link>
		<comments>http://www.foolbirds.com/symfony-cheat-sheet.html#comments</comments>
		<pubDate>Tue, 27 Oct 2009 04:44:54 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[Cheat Sheets]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=1037</guid>
		<description><![CDATA[上一篇文章里介绍了symfony的cheat sheet，但官方的下载地址貌似被墙，所以我也没有下载到全部的cheat sheet，不过还好bobhero那里有，虽然是1.0的，但很多内容依然很有用。

































Cheat Sheets!
symfony 1.4 数据库 utf8设置
symfony1.2下的命令行程序(batch)
后台模板结构
在Symfony中使用第三方图片处理工具WideImage
Add table prefix  in symfony－在symfony中使用表前缀
Symfony中的action和actions
跳并快乐着－symfony跳转指南
symfony数据表关联详解(for propel)
symfony命令行详解

]]></description>
			<content:encoded><![CDATA[<p><a href="/cheat-sheets.html">上一篇文章</a>里介绍了symfony的cheat sheet，但官方的下载地址貌似被墙，所以我也没有下载到全部的cheat sheet，不过还好bobhero那里有，虽然是1.0的，但很多内容依然很有用。</p>
<table>
<tr>
<td>
<div id="attachment_1051" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-directory-structure-and-cli.pdf"><img class="size-medium wp-image-1051 " title="symfony directory structure and CLI" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-directory-structure-and-cli-211x299.jpg" alt="symfony cheatsheet directory structure and cli" width="211" height="299" /></a><p class="wp-caption-text">symfony directory structure and CLI</p></div>
</td>
<td>
<div id="attachment_1052" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-helpers-part1-js-and-ajax.pdf"><img class="size-medium wp-image-1052  " title="symfony helpers js and ajax" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-helpers-part1-js-and-ajax-211x299.jpg" alt="symfony cheatsheet helpers part1 javascript and AJAX" width="211" height="299" /></a><p class="wp-caption-text">symfony helpers javascript and AJAX</p></div>
</td>
<td>
<div id="attachment_1053" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-helpers-part2-forms.pdf"><img class="size-medium wp-image-1053" title="symfony helpers forms" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-helpers-part2-forms-211x299.jpg" alt="symfony helpers forms" width="211" height="299" /></a><p class="wp-caption-text">symfony helpers forms</p></div>
</td>
</tr>
<tr>
<td>
<div id="attachment_1060" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-views-part1.pdf"><img class="size-medium wp-image-1060 " title="symfony views part1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-views-part1-211x299.jpg" alt="symfony cheatsheet views part1" width="211" height="299" /></a><p class="wp-caption-text">symfony views part1</p></div>
</td>
<td>
<div id="attachment_1050" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-views-part2.pdf"><img class="size-medium wp-image-1050 " title="symfony views part2" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-views-part2-211x299.jpg" alt="symfony cheatsheet views part2" width="211" height="299" /></a><p class="wp-caption-text">symfony views part2</p></div>
</td>
<td>
<div id="attachment_1056" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-model-part1.pdf"><img class="size-medium wp-image-1056 " title="symfony model part1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-model-part1-211x299.jpg" alt="symfony cheatsheet model part1" width="211" height="299" /></a><p class="wp-caption-text">symfony model part1</p></div>
</td>
</tr>
<tr>
<td>
<div id="attachment_1057" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-model-part2.pdf"><img class="size-medium wp-image-1057 " title="symfony model part2" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-model-part2-211x299.jpg" alt="symfony cheatsheet model part2" width="211" height="299" /></a><p class="wp-caption-text">symfony model part2</p></div>
</td>
<td>
<div id="attachment_1055" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-model-criteria-criterionrs.pdf"><img class="size-medium wp-image-1055" title="symfony model criteria criterionrs" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-model-criteria-criterionrs-211x299.jpg" alt="symfony model criteria criterionrs" width="211" height="299" /></a><p class="wp-caption-text">symfony model criteria criterionrs</p></div>
</td>
<td>
<div id="attachment_1059" class="wp-caption alignnone" style="width: 221px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-server-validation.pdf"><img class="size-medium wp-image-1059 " title="symfony server validation" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-server-validation-211x299.jpg" alt="symfony cheatsheet server validation" width="211" height="299" /></a><p class="wp-caption-text">symfony server validation</p></div>
</td>
</tr>
<tr>
<td>
<div id="attachment_1054" class="wp-caption alignnone" style="width: 242px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-lime.pdf"><img class="size-medium wp-image-1054" title="symfony lime" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-lime-232x300.jpg" alt="symfony lime" width="232" height="300" /></a><p class="wp-caption-text">symfony lime</p></div>
</td>
<td colspan='2'>
<div id="attachment_1058" class="wp-caption alignnone" style="width: 310px"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-orm.pdf"><img class="size-medium wp-image-1058" title="symfony orm" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-cheatsheet-orm-300x212.jpg" alt="symfony orm" width="300" height="212" /></a><p class="wp-caption-text">symfony orm</p></div>
</td>
</tr>
</table>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/cheat-sheets.html" title="Cheat Sheets!">Cheat Sheets!</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/batch-in-symfony12.html" title="symfony1.2下的命令行程序(batch)">symfony1.2下的命令行程序(batch)</a></li>
<li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="后台模板结构">后台模板结构</a></li>
<li><a href="http://www.foolbirds.com/wideimage-in-symfony.html" title="在Symfony中使用第三方图片处理工具WideImage">在Symfony中使用第三方图片处理工具WideImage</a></li>
<li><a href="http://www.foolbirds.com/add-table-prefix-in-symfony.html" title="Add table prefix  in symfony－在symfony中使用表前缀">Add table prefix  in symfony－在symfony中使用表前缀</a></li>
<li><a href="http://www.foolbirds.com/symfony%e4%b8%ad%e7%9a%84action%e5%92%8cactions.html" title="Symfony中的action和actions">Symfony中的action和actions</a></li>
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
<li><a href="http://www.foolbirds.com/symfony-references-with-propel.html" title="symfony数据表关联详解(for propel)">symfony数据表关联详解(for propel)</a></li>
<li><a href="http://www.foolbirds.com/symfony-cmd.html" title="symfony命令行详解">symfony命令行详解</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/symfony-cheat-sheet.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cheat Sheets!</title>
		<link>http://www.foolbirds.com/cheat-sheets.html</link>
		<comments>http://www.foolbirds.com/cheat-sheets.html#comments</comments>
		<pubDate>Thu, 22 Oct 2009 08:59:25 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[Cheat Sheets]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=1005</guid>
		<description><![CDATA[bobhero就喜欢搞一些稀奇古怪的东西，800块的古董式键盘买了两个外加一个超级怪异的轨迹球鼠标，智能手机买了两个一个打电话一个玩日历，Arch Linux装了Awesome然后接了两个显示器。早在两年之前，我刚来公司的时候，就对他的这些卡片很感兴趣。

这个东西的英文名叫cheat sheet，找了很久也没有找到一个合适的中文名，不过我觉得叫备忘卡很合适。从以往的工作上来看，cheatsheet的确帮了不少忙，最关键是省了翻手册的时间，网上有很多的cheat sheet，打印下来，塑封，然后放在电脑旁，下面是来自Added Bytes的cheat sheets。



PHP  (V1)
PHP (V2)
Mysql







JavaScript 
CSS (V1)
CSS  (V2)







mod_rewrite  (V1)
mod_rewrite (V2)
HTML







正则表达式 (V1)
正则表达式 (V2)
ASP/VBScript







Python (V1)
Ruby on Rails
Subversion(SVN)








请访问 http://www.addedbytes.com/cheat-sheets/获取更多的CheatSheets.
注意：打印cheatsheet最好打印pdf版本的，图片格式的清晰度可能不是很好。忘了提醒大家了，塑封的时候可以把两张塑封到一起，比如PHP(V1)和PHP(V2)可以塑封个反正面。
下面这些是symfony官方提供的cheat sheets，貌似是1.0的，不过或多或少还有些用处。



Symfony Admin Generator
Symfony Directory Structure And CLI







请访问http://trac.symfony-project.org/wiki/CheatSheets来获取更多的symfony cheat sheets。下载链接我这里访问不了，不知道是删掉了还是被墙了，有新的发现我会再发出来。
http://www.addedbytes.com/cheat-sheets/php-cheat-sheet/

symfony cheat sheet
symfony 1.4 数据库 utf8设置
symfony1.2下的命令行程序(batch)
后台模板结构
在Symfony中使用第三方图片处理工具WideImage
Add table prefix  in symfony－在symfony中使用表前缀
Symfony中的action和actions
跳并快乐着－symfony跳转指南
symfony数据表关联详解(for propel)
symfony命令行详解

]]></description>
			<content:encoded><![CDATA[<p>bobhero就喜欢搞一些稀奇古怪的东西，800块的古董式键盘买了两个外加一个超级怪异的轨迹球鼠标，智能手机买了两个一个打电话一个玩日历，Arch Linux装了Awesome然后接了两个显示器。早在两年之前，我刚来公司的时候，就对他的这些卡片很感兴趣。</p>
<p style="text-align: center;"><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/cheatsheets.jpg"><img class="size-medium wp-image-1007 aligncenter" title="cheatsheets" src="http://www.foolbirds.com/wp-content/uploads/2009/10/cheatsheets-222x300.jpg" alt="cheatsheets" width="222" height="300" /></a></p>
<p>这个东西的英文名叫cheat sheet，找了很久也没有找到一个合适的中文名，不过我觉得叫备忘卡很合适。从以往的工作上来看，cheatsheet的确帮了不少忙，最关键是省了翻手册的时间，网上有很多的cheat sheet，打印下来，塑封，然后放在电脑旁，下面是来自<a href="http://www.addedbytes.com/cheat-sheets/">Added Bytes</a>的cheat sheets。</p>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/php-cheat-sheet-version-1/">PHP  (V1)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/php-cheat-sheet/">PHP (V2)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/mysql-cheat-sheet/">Mysql</a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/php-cheat-sheet-version-1/"><img class="alignnone size-medium wp-image-1006" title="php-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/php-cheat-sheet-v1-230x300.png" alt="php-cheat-sheet-v1" width="230" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/php-cheat-sheet/"><img class="alignnone size-medium wp-image-1008" title="php-cheat-sheet-v2" src="http://www.foolbirds.com/wp-content/uploads/2009/10/php-cheat-sheet-v2-220x300.png" alt="php-cheat-sheet-v2" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/mysql-cheat-sheet/"><img class="alignnone size-medium wp-image-1009" title="mysql-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/mysql-cheat-sheet-v1-230x300.png" alt="mysql-cheat-sheet-v1" width="230" height="300" /></a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/javascript-cheat-sheet/">JavaScript </a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet-version-1/">CSS (V1)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/">CSS  (V2)</a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/javascript-cheat-sheet/"><img class="alignnone size-medium wp-image-1010" title="javascript-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/javascript-cheat-sheet-v1-220x300.png" alt="javascript-cheat-sheet-v1" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet-version-1/"><img class="alignnone size-medium wp-image-1011" title="css-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/css-cheat-sheet-v1-220x300.png" alt="css-cheat-sheet-v1" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/"><img class="alignnone size-medium wp-image-1012" title="css-cheat-sheet-v2" src="http://www.foolbirds.com/wp-content/uploads/2009/10/css-cheat-sheet-v2-220x300.png" alt="css-cheat-sheet-v2" width="220" height="300" /></a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet-version-1/">mod_rewrite  (V1)</a></td>
<td><a href="http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/">mod_rewrite (V2)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/html-cheat-sheet/">HTML</a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet-version-1/"><img class="alignnone size-medium wp-image-1013" title="mod_rewrite-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/mod_rewrite-cheat-sheet-v1-221x300.png" alt="mod_rewrite-cheat-sheet-v1" width="221" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/"><img class="alignnone size-medium wp-image-1014" title="mod_rewrite-cheat-sheet-v2" src="http://www.foolbirds.com/wp-content/uploads/2009/10/mod_rewrite-cheat-sheet-v2-220x300.png" alt="mod_rewrite-cheat-sheet-v2" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/html-cheat-sheet/"><img class="alignnone size-medium wp-image-1015" title="html-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/html-cheat-sheet-v1-220x300.png" alt="html-cheat-sheet-v1" width="220" height="300" /></a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet-version-1/">正则表达式 (V1)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/">正则表达式 (V2)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/asp-vbscript-cheat-sheet/">ASP/VBScript</a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet-version-1/"><img class="alignnone size-medium wp-image-1016" title="regular-expressions-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/regular-expressions-cheat-sheet-v1-220x300.png" alt="regular-expressions-cheat-sheet-v1" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/"></a><a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/"><img class="alignnone size-medium wp-image-1017" title="regular-expressions-cheat-sheet-v2" src="http://www.foolbirds.com/wp-content/uploads/2009/10/regular-expressions-cheat-sheet-v2-220x300.png" alt="regular-expressions-cheat-sheet-v2" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/asp-vbscript-cheat-sheet/"></a><a href="http://www.addedbytes.com/cheat-sheets/asp-vbscript-cheat-sheet/"><img class="alignnone size-medium wp-image-1018" title="asp-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/asp-cheat-sheet-v1-230x300.png" alt="asp-cheat-sheet-v1" width="230" height="300" /></a></td>
</tr>
<tr>
<td><a href="python-cheat-sheet-v1">Python (V1)</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/ruby-on-rails-cheat-sheet/">Ruby on Rails</a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/subversion-cheat-sheet/">Subversion(SVN)</a></td>
</tr>
<tr>
<td><a href="http://www.addedbytes.com/cheat-sheets/python-cheat-sheet/"><img class="alignnone size-medium wp-image-1019" title="python-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/python-cheat-sheet-v1-220x300.png" alt="python-cheat-sheet-v1" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/ruby-on-rails-cheat-sheet/"><img class="alignnone size-medium wp-image-1020" title="ruby-on-rails-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/ruby-on-rails-cheat-sheet-v1-220x300.png" alt="ruby-on-rails-cheat-sheet-v1" width="220" height="300" /></a></td>
<td><a href="http://www.addedbytes.com/cheat-sheets/subversion-cheat-sheet/"><img class="alignnone size-medium wp-image-1021" title="subversion-cheat-sheet-v1" src="http://www.foolbirds.com/wp-content/uploads/2009/10/subversion-cheat-sheet-v1-220x300.png" alt="subversion-cheat-sheet-v1" width="220" height="300" /></a></td>
</tr>
</tbody>
</table>
<p>请访问 <a href="http://www.addedbytes.com/cheat-sheets/">http://www.addedbytes.com/cheat-sheets/</a>获取更多的CheatSheets.</p>
<p><span style="color: #ff0000;">注意：打印cheatsheet最好打印pdf版本的，图片格式的清晰度可能不是很好。忘了提醒大家了，塑封的时候可以把两张塑封到一起，比如PHP(V1)和PHP(V2)可以塑封个反正面。</span></p>
<p>下面这些是<a href="http://www.symfony-project.com">symfony</a>官方提供的cheat sheets，貌似是1.0的，不过或多或少还有些用处。</p>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.symfony-project.com/uploads/assets/sfAdminGeneratorRefCard.pdf">Symfony Admin Generator</a></td>
<td><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-directory-structure-and-cli.jpg">Symfony Directory Structure And CLI</a></td>
</tr>
<tr>
<td><a href="http://www.symfony-project.com/uploads/assets/sfAdminGeneratorRefCard.pdf"><img class="alignnone size-medium wp-image-1025" title="symfony-admin-generator" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-admin-generator-300x216.jpg" alt="symfony-admin-generator" width="300" height="216" /></a></td>
<td><a href="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-directory-structure-and-cli.jpg"><img class="alignnone size-medium wp-image-1026" title="symfony-directory-structure-and-cli" src="http://www.foolbirds.com/wp-content/uploads/2009/10/symfony-directory-structure-and-cli-212x300.jpg" alt="symfony-directory-structure-and-cli" width="212" height="300" /></a></td>
</tr>
</tbody>
</table>
<p>请访问<a href="http://trac.symfony-project.org/wiki/CheatSheets">http://trac.symfony-project.org/wiki/CheatSheets</a>来获取更多的symfony cheat sheets。下载链接我这里访问不了，不知道是删掉了还是被墙了，有新的发现我会再发出来。</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 389px; width: 1px; height: 1px;">http://www.addedbytes.com/cheat-sheets/php-cheat-sheet/</div>
<ul class="related_post">
<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/symfony-1-4-database-utf8.html" title="symfony 1.4 数据库 utf8设置">symfony 1.4 数据库 utf8设置</a></li>
<li><a href="http://www.foolbirds.com/batch-in-symfony12.html" title="symfony1.2下的命令行程序(batch)">symfony1.2下的命令行程序(batch)</a></li>
<li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="后台模板结构">后台模板结构</a></li>
<li><a href="http://www.foolbirds.com/wideimage-in-symfony.html" title="在Symfony中使用第三方图片处理工具WideImage">在Symfony中使用第三方图片处理工具WideImage</a></li>
<li><a href="http://www.foolbirds.com/add-table-prefix-in-symfony.html" title="Add table prefix  in symfony－在symfony中使用表前缀">Add table prefix  in symfony－在symfony中使用表前缀</a></li>
<li><a href="http://www.foolbirds.com/symfony%e4%b8%ad%e7%9a%84action%e5%92%8cactions.html" title="Symfony中的action和actions">Symfony中的action和actions</a></li>
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
<li><a href="http://www.foolbirds.com/symfony-references-with-propel.html" title="symfony数据表关联详解(for propel)">symfony数据表关联详解(for propel)</a></li>
<li><a href="http://www.foolbirds.com/symfony-cmd.html" title="symfony命令行详解">symfony命令行详解</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/cheat-sheets.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>awesome 的 多头显示</title>
		<link>http://www.foolbirds.com/awesome_dual_screen.html</link>
		<comments>http://www.foolbirds.com/awesome_dual_screen.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 10:02:23 +0000</pubDate>
		<dc:creator>bobhero</dc:creator>
				<category><![CDATA[Arch]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[awesome]]></category>
		<category><![CDATA[dual]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[多头]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=988</guid>
		<description><![CDATA[awesome 的确是个好东西，用上了，就不喜欢别的女人了
今天心血来潮再次找出 awesome官网上的 图片 YY了一会 真爽啊，四个显示器


等咱有了钱，弄八个显示器 ，二十四的竖着放
我把公司里的大屁股显示器搬出来了 放在桌面上 ，准备实施 双头显示器 计划
首先要有一块双头的显卡 我找到了 ati x500 ，换上 HDMI 2 VGA线 开始了漫长的驱动过程，使了半天力气，终于放弃了，ATI 官方的驱动不好用 ，不知道是AMD 不牛X ，还是ATI太弱。
有的时候放弃 也是一种进步
我换了一个N卡
顺序驱上，竟然发现有图型设置程序 爽 nvidia-setting 经过一阵设置，黑屏，重启，再黑，再启。终于
桌面OK了
有以下几点需要注意：
1.能不用A卡就不要用A卡
2.有一个什么什么东西要打开,要不然AWESOME 不能很好的工作   =&#62; xinerama
3.两个显示器最好是一样的，要不然很影响心情
上图
用SCROT 竟然直接拿到了全图

]]></description>
			<content:encoded><![CDATA[<p><strong>awesome 的确是个好东西，用上了，就不喜欢别的女人了</strong></p>
<p><strong>今天心血来潮再次找出 awesome官网上的 <a title="awesome 4 mu" href="http://awesome.naquadah.org/images/4mon.png" target="_blank">图片</a> YY了一会 真爽啊，四个显示器</strong></p>
<p><strong><br />
</strong></p>
<p><strong>等咱有了钱，弄八个显示器 ，二十四的竖着放</strong></p>
<p><strong>我把公司里的大屁股显示器搬出来了 放在桌面上 ，准备实施 双头显示器 计划</strong></p>
<p><strong>首先要有一块双头的显卡 我找到了 ati x500 ，换上 HDMI 2 VGA线 开始了漫长的驱动过程，使了半天力气，终于放弃了，ATI 官方的驱动不好用 ，不知道是AMD 不牛X ，还是ATI太弱。</strong></p>
<p><strong>有的时候放弃 也是一种进步</strong></p>
<p><strong>我换了一个N卡</strong></p>
<p><strong>顺序驱上，竟然发现有图型设置程序 爽 nvidia-setting 经过一阵设置，黑屏，重启，再黑，再启。终于<br />
桌面OK了</strong></p>
<p><strong>有以下几点需要注意：<br />
1.能不用A卡就不要用A卡<br />
2.有一个什么什么东西要打开,要不然AWESOME 不能很好的工作   =&gt; xinerama<br />
3.两个显示器最好是一样的，要不然很影响心情</strong></p>
<p><strong>上图</strong></p>
<p><strong>用SCROT 竟然直接拿到了全图<br />
</strong></p>
<p><strong>
<a href='http://www.foolbirds.com/awesome_dual_screen.html/attachment/02' title='02'><img width="150" height="150" src="http://www.foolbirds.com/wp-content/uploads/2009/09/02-150x150.jpg" class="attachment-thumbnail" alt="" title="02" /></a>
<a href='http://www.foolbirds.com/awesome_dual_screen.html/2009-09-01-171924_2560x1024_scrot' title='2009-09-01-171924_2560x1024_scrot'><img width="150" height="150" src="http://www.foolbirds.com/wp-content/uploads/2009/09/2009-09-01-171924_2560x1024_scrot-150x150.png" class="attachment-thumbnail" alt="" title="2009-09-01-171924_2560x1024_scrot" /></a>
<a href='http://www.foolbirds.com/awesome_dual_screen.html/attachment/01' title='01'><img width="150" height="150" src="http://www.foolbirds.com/wp-content/uploads/2009/09/01-150x150.jpg" class="attachment-thumbnail" alt="" title="01" /></a>
<br />
</strong>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/awesome3-default-hotkey.html" title="Awesome3.0默认快捷键">Awesome3.0默认快捷键</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/awesome_dual_screen.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>兼容IE6,IE7,IE8和Firefox的图片上传预览效果</title>
		<link>http://www.foolbirds.com/image-upload-preview.html</link>
		<comments>http://www.foolbirds.com/image-upload-preview.html#comments</comments>
		<pubDate>Thu, 06 Aug 2009 16:29:54 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[预览]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=967</guid>
		<description><![CDATA[所谓图片上传预览，就是在使用文件选择框选择了文件之后就可以在页面上看见图片的效果，关于这个效果我一直认为是无法做到的，没想到前不久被zhuozi搞定了。
网上流传的一些关于图片上传预览的代码都是差不多的，IE6下使用文件选择对象的value属性取出将要上传的本地文件路径，然后使用本地路径构造img标签，代码如下：
&#60;input type="file"
onchange="document.getElementById('view').innerHTML=' &#60;img src=\'' + this.value + '\'/&#62;';" /&#62;
&#60;div id="view"&#62; &#60;/div&#62;
网上有些人说上面的代码可以在IE7下生效，但实际测试是不行的，因为IE7的img标签不支持本地路径，所以需要使用div和css的filter来实现这个效果，代码如下：
&#60;input type="file" onchange=‘javascript:
document.getElementById("pic").filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src
= this.value;’ /&#62;&#60;br /&#62;
&#60;div id="pic"
style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
width:400px;height:200px;"&#62;&#60;/div&#62;
而关于Firefox的图片上传预览效果，网上几乎找不到相关资料，比较容易想到的解决方案无非是自动将图片上传到服务器再显示出来诸如此类，但这里我们不对此类技术进行讨论，我们要做的是正宗的上传前本地预览。
以下是最后的研究结果，同时兼容IE6,IE7,IE8和Firefox。
&#60;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&#62;
&#60;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&#62;
&#60;head&#62;
&#60;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&#62;
&#60;script&#62;
var picPath;
var image;
// preview picture
function preview()
{
  document.getElementById('preview').style.display = 'none';
  // 下面代码用来获得图片尺寸，这样才能在IE下正常显示图片
  document.getElementById('box').innerHTML
    = "&#60;img width='"+image.width+"' height='"+image.height+"' id='aPic' src='"+picPath+"'&#62;";
}
// show [...]]]></description>
			<content:encoded><![CDATA[<p>所谓图片上传预览，就是在使用文件选择框选择了文件之后就可以在页面上看见图片的效果，关于这个效果我一直认为是无法做到的，没想到前不久被zhuozi搞定了。</p>
<p>网上流传的一些关于图片上传预览的代码都是差不多的，IE6下使用文件选择对象的value属性取出将要上传的本地文件路径，然后使用本地路径构造img标签，代码如下：</p>
<p><code>&lt;input type="file"<br />
onchange="document.getElementById('view').innerHTML=' &lt;img src=\'' + this.value + '\'/&gt;';" /&gt;<br />
&lt;div id="view"&gt; &lt;/div&gt;</code></p>
<p>网上有些人说上面的代码可以在IE7下生效，但实际测试是不行的，因为IE7的img标签不支持本地路径，所以需要使用div和css的filter来实现这个效果，代码如下：</p>
<p><code>&lt;input type="file" onchange=‘javascript:<br />
document.getElementById("pic").filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src<br />
= this.value;’ /&gt;&lt;br /&gt;<br />
&lt;div id="pic"<br />
style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);<br />
width:400px;height:200px;"&gt;&lt;/div&gt;</code></p>
<p>而关于Firefox的图片上传预览效果，网上几乎找不到相关资料，比较容易想到的解决方案无非是自动将图片上传到服务器再显示出来诸如此类，但这里我们不对此类技术进行讨论，我们要做的是正宗的上传前本地预览。</p>
<p>以下是最后的研究结果，<span style="color: #ff0000;">同时兼容IE6,IE7,IE8和Firefox</span>。</p>
<p><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"<br />
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />
&lt;script&gt;<br />
var picPath;<br />
var image;<br />
// preview picture<br />
function preview()<br />
{<br />
  document.getElementById('preview').style.display = 'none';<br />
  // 下面代码用来获得图片尺寸，这样才能在IE下正常显示图片<br />
  document.getElementById('box').innerHTML<br />
    = "&lt;img width='"+image.width+"' height='"+image.height+"' id='aPic' src='"+picPath+"'&gt;";<br />
}<br />
// show view button<br />
function buttonShow()<br />
{<br />
/*<br />
这里用来解决图片加载延时造成的预览失败.<br />
简单说明一下，当image对象的src属性发生改变时JavaScript会重新给image装载图片内容，<br />
这通常是需要一些时间的，如果在加载完成之前想将图片显示出来就会造成错误，所以我们<br />
通过图片的宽度和高度来判断图片是否已经被成功加载，加载完毕才会显示预览按钮.<br />
这里我仍然有一个困惑，在IE7下预览效果偶尔会失效.<br />
*/<br />
  if ( image.width == 0 || image.height == 0 ) {<br />
    setTimeout(buttonShow, 1000);<br />
  } else {<br />
    document.getElementById('preview').style.display = 'block';<br />
  }<br />
}<br />
function loadImage(ele) {<br />
  picPath   = getPath(ele);<br />
  image     = new Image();<br />
  image.src = picPath;<br />
  setTimeout(buttonShow, 1000);<br />
}<br />
function getPath(obj)<br />
{<br />
  if(obj)<br />
  {<br />
    //ie<br />
    if (window.navigator.userAgent.indexOf("MSIE")&gt;=1)<br />
    {<br />
      obj.select();<br />
      // IE下取得图片的本地路径<br />
      return document.selection.createRange().text;<br />
    }<br />
    //firefox<br />
    else if(window.navigator.userAgent.indexOf("Firefox")&gt;=1)<br />
    {<br />
      if(obj.files)<br />
      {<br />
        // Firefox下取得的是图片的数据<br />
        return obj.files.item(0).getAsDataURL();<br />
      }<br />
      return obj.value;<br />
    }<br />
    return obj.value;<br />
  }<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;input type="file" name="pic" id="pic" onchange='loadImage(this)' /&gt;<br />
&lt;input id='preview' type='button' value='preview' style='display:none;' onclick='preview();'&gt;<br />
&lt;div id='box'&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></p>
<p>补充：<br />
上面的代码经过测试貌似不是那么稳定，一些机器上的IE7会失效，我在6台电脑上测试，FF全通过，IE7下有一台没有通过，估计是和IE的设置有关， 而且即使可以正常使用也不是每次都可以成功显示出预览按钮，这个原因也没有找到，估计是图片加载失败什么的，所以例子里特殊处理的预览按钮的显示，即时预览功能失败也不影响其他功能。</p>
<p>下面是在我机器上IE7的测试图片：</p>
<p><a href="http://www.foolbirds.com/wp-content/uploads/2009/08/image-upload-preview-ie71.gif"><img src="http://www.foolbirds.com/wp-content/uploads/2009/08/image-upload-preview-ie71.gif" alt="image-upload-preview-ie7" title="image-upload-preview-ie7" width="400" height="434" class="aligncenter size-full wp-image-985" /></a>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/wideimage-in-symfony.html" title="在Symfony中使用第三方图片处理工具WideImage">在Symfony中使用第三方图片处理工具WideImage</a></li>
<li><a href="http://www.foolbirds.com/symfony-fckeditory-and-upload-image.html" title="在symfony中使用FCKeditor上传图片附件">在symfony中使用FCKeditor上传图片附件</a></li>
<li><a href="http://www.foolbirds.com/symfony12-upload-file-and-validate.html" title="symfony1.2中的文件上传和验证">symfony1.2中的文件上传和验证</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/image-upload-preview.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>成为一名symfony文档贡献者.</title>
		<link>http://www.foolbirds.com/to-be-a-symfony-contributor.html</link>
		<comments>http://www.foolbirds.com/to-be-a-symfony-contributor.html#comments</comments>
		<pubDate>Fri, 31 Jul 2009 16:32:18 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=955</guid>
		<description><![CDATA[很久没有更新博客了，最新的一些工作没有涉及到symfony相关的研究，不过利用了一些空闲参与了symfony文档的翻译工作。
其实目前来讲也不是真正的翻译，只是将网络上已经有的文档整理到symfony官方的svn中去，也算为symfony和广大国内的PHP开发者做一点点贡献。
在这也可以提醒一些symfony爱好者，官方的jobeet文档的中文版又开始更新了，是整理自symfony中文的，目前还没有全部整理完，整理完毕之后我还会尝试完成friend没有发表出来的后几章的内容。
闲话不多讲了，现在主要说说如何参与到symfony的开发中去。
symfony项目是基于svn(subversion)的，所以如果你要参与到开发中去，一定要有一个svn账号，这个账号不是随便可以申请得到的，需要向symfony的管理者fabien(fabien.potencier[at]symfony-project.com)索取，不过貌似是不能参与symfony源码开发的（这个是我推测，如果你有能力也可以尝试和fabien协商一下）。
fabien貌似很忙，大概一周左右查收一次邮件，不过应该是有求必应的。在没有得到svn账号之前，你也是可以检出（checkout）symfony项目的。1.2相关文档的svn地址是：
http://svn.symfony-project.com/doc/branches/1.2
检出之后你就可以看到全部symfony1.2相关文档所有语言版本的源文件了，当然这不是最终体现在网页上的文档，发布到网页上还需要一个编译的过程。

你也可以在symfony项目的trac（http://trac.symfony-project.org/browser）上查看全部源码。
如果你拥有了一个有修改权限的svn账号，你就可以开始你的翻译工作了，翻译完毕可以进行commit操作，commit之后是不会立刻体现在网页上的，上面说过，在那之前需要有一个编译的过程，一般是一天一次，多数在每天下午，可能不只是编译，fabien也会进行一些审核工作。
如果您的修改通过审核那么恭喜你，你成为了伟大的symfony的一名贡献者！
如果你不会操作svn或者没有得到svn账号，也可以将您的译文发给我(makerwang[at]gmail.com)，我会帮你整理提交到官方的svn中去，关于版权的问题嘛，为了尊重原著，官方的翻译工作应该是匿名的，不过你仍然可以将您的翻译发布到其他地方，前提是你要遵守symfony的by-cc协议。
Random Posts

awesome 的 多头显示
关于数据查询的使用
symfony1.2使用1.0插件sfFeedPlugin一例
Symfony中组件槽(Component Slot)的应用
symfony1.2中的文件上传和验证
symfony 环境检查
如何在action中设置filter过滤器，消除过滤影响
如何在List表单下面添加select系列动作
FreeBSD7.10通过ports安装lamp
Symfony框架中的“.htaccess”文件和“根”目录

]]></description>
			<content:encoded><![CDATA[<p>很久没有更新博客了，最新的一些工作没有涉及到<a href="http://www.symfony-project.org">symfony</a>相关的研究，不过利用了一些空闲参与了symfony文档的翻译工作。</p>
<p>其实目前来讲也不是真正的翻译，只是将网络上已经有的文档整理到symfony官方的svn中去，也算为symfony和广大国内的PHP开发者做一点点贡献。</p>
<p>在这也可以提醒一些symfony爱好者，官方的<a href="http://www.symfony-project.org/jobeet/1_2/Propel/en/">jobeet文档</a>的<a href="http://www.symfony-project.org/jobeet/1_2/Propel/zh_CN">中文版</a>又开始更新了，是整理自<a href="http://symfony.lag.cn">symfony中文</a>的，目前还没有全部整理完，整理完毕之后我还会尝试完成friend没有发表出来的后几章的内容。</p>
<p>闲话不多讲了，现在主要说说如何参与到symfony的开发中去。</p>
<p>symfony项目是基于svn(subversion)的，所以如果你要参与到开发中去，一定要有一个svn账号，这个账号不是随便可以申请得到的，需要向symfony的管理者fabien(fabien.potencier[at]symfony-project.com)索取，不过貌似是不能参与symfony源码开发的（这个是我推测，如果你有能力也可以尝试和fabien协商一下）。</p>
<p>fabien貌似很忙，大概一周左右查收一次邮件，不过应该是有求必应的。在没有得到svn账号之前，你也是可以检出（checkout）symfony项目的。1.2相关文档的svn地址是：</p>
<blockquote><p>http://svn.symfony-project.com/doc/branches/1.2</p></blockquote>
<p>检出之后你就可以看到全部symfony1.2相关文档所有语言版本的源文件了，当然这不是最终体现在网页上的文档，发布到网页上还需要一个编译的过程。</p>
<p><a href="http://www.foolbirds.com/wp-content/uploads/2009/08/svn.JPG"><img class="aligncenter size-full wp-image-956" title="svn" src="http://www.foolbirds.com/wp-content/uploads/2009/08/svn.JPG" alt="svn" width="595" height="448" /></a></p>
<p>你也可以在symfony项目的trac（<a href="http://trac.symfony-project.org/browser">http://trac.symfony-project.org/browser</a>）上查看全部源码。</p>
<p>如果你拥有了一个有修改权限的svn账号，你就可以开始你的翻译工作了，翻译完毕可以进行commit操作，commit之后是不会立刻体现在网页上的，上面说过，在那之前需要有一个编译的过程，一般是一天一次，多数在每天下午，可能不只是编译，fabien也会进行一些审核工作。</p>
<p>如果您的修改通过审核那么恭喜你，你成为了伟大的symfony的一名贡献者！</p>
<p>如果你不会操作svn或者没有得到svn账号，也可以将您的译文发给我(makerwang[at]gmail.com)，我会帮你整理提交到官方的svn中去，关于版权的问题嘛，为了尊重原著，官方的翻译工作应该是匿名的，不过你仍然可以将您的翻译发布到其他地方，前提是你要遵守symfony的<a href="http://creativecommons.org/licenses/by-sa/3.0/">by-cc</a>协议。<br />
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/archlinux-lam.html" title="archlinux 安装 LAMP环境">archlinux 安装 LAMP环境</a></li>
<li><a href="http://www.foolbirds.com/partial-and-layout.html" title="局部模板和全局模板">局部模板和全局模板</a></li>
<li><a href="http://www.foolbirds.com/about-upload-images-path.html" title="关于上传图片后显示上传图片的路径问题">关于上传图片后显示上传图片的路径问题</a></li>
<li><a href="http://www.foolbirds.com/let-symfony-work-in-ubuntu.html" title="在Ubuntu下面，让symfony工作起来">在Ubuntu下面，让symfony工作起来</a></li>
<li><a href="http://www.foolbirds.com/vim-colors-schema.html" title="精选vim的配色">精选vim的配色</a></li>
<li><a href="http://www.foolbirds.com/2010-1-20%e5%bc%80%e5%8f%91%e6%8a%80%e5%b7%a7%e6%80%bb%e7%bb%93.html" title="开发技巧总结">开发技巧总结</a></li>
<li><a href="http://www.foolbirds.com/%e5%9c%a8layout%e4%b8%ad%e5%ba%94%e7%94%a8action%e5%ae%9a%e4%b9%89%e7%9a%84%e5%8f%98%e9%87%8f.html" title="在layout中应用action定义的变量">在layout中应用action定义的变量</a></li>
<li><a href="http://www.foolbirds.com/symfony-folder-and-deploy.html" title="symfony目录结构及部署办法说明">symfony目录结构及部署办法说明</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-orm-propel.html" title="关于数据查询的使用">关于数据查询的使用</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/to-be-a-symfony-contributor.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>判断搜索引擎爬虫</title>
		<link>http://www.foolbirds.com/%e5%88%a4%e6%96%ad%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%88%ac%e8%99%ab.html</link>
		<comments>http://www.foolbirds.com/%e5%88%a4%e6%96%ad%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%88%ac%e8%99%ab.html#comments</comments>
		<pubDate>Sat, 20 Jun 2009 06:34:53 +0000</pubDate>
		<dc:creator>hansir85</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[robot，爬虫]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=863</guid>
		<description><![CDATA[如何判断访问是否来自搜索引擎。
可以通过HTTP header 内的 HTTP USER AGENT 识别。
（还有别的方法）
Baiduspider+(+http://www.baidu.com/search/spider.htm)
这是百度的爬虫。
使用php变量，$_SERVER['HTTP_USER_AGENT']
以PHP程序为例：

$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
$spiders = array('Baiduspider', 'Googlebot');//添加需要的爬虫关键字
foreach ($spiders as $spider)
{
$spider = strtolower($spider);
if (strpos($userAgent, $spider) !== false)
{
return 'is spider';
}
return 'is not spider';
}
?&#62;

一些常用的爬虫
百度爬虫
Baiduspider+(+http://www.baidu.com/search/spider.htm)
雅虎爬虫，分别是雅虎中国和美国总部的爬虫
Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
新浪爱问爬虫
iaskspider/2.0(+http://iask.com/help/help_index.html)
Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)
搜狗爬虫
Sogou web spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07″)
Sogou Push Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07″)
【早期用法：“sogou spider”】
Google爬虫
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Google AdSense广告内容匹配爬虫
Mediapartners-Google/2.1
网易爬虫
Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.yodao.com/help/webmaster/spider/;)
【早期采用“ OutfoxBot/0.5 (for internet experiments; [...]]]></description>
			<content:encoded><![CDATA[<p>如何判断访问是否来自搜索引擎。<br />
可以通过HTTP header 内的 HTTP USER AGENT 识别。<br />
（还有别的方法）<br />
Baiduspider+(+http://www.baidu.com/search/spider.htm)<br />
这是百度的爬虫。</p>
<p>使用php变量，$_SERVER['HTTP_USER_AGENT']<br />
以PHP程序为例：<br />
<code><br />
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);<br />
$spiders = array('Baiduspider', 'Googlebot');//添加需要的爬虫关键字<br />
foreach ($spiders as $spider)<br />
{<br />
$spider = strtolower($spider);<br />
if (strpos($userAgent, $spider) !== false)<br />
{<br />
return 'is spider';<br />
}<br />
return 'is not spider';<br />
}<br />
?&gt;<br />
</code></p>
<p>一些常用的爬虫<br />
百度爬虫<br />
Baiduspider+(+http://www.baidu.com/search/spider.htm)</p>
<p>雅虎爬虫，分别是雅虎中国和美国总部的爬虫<br />
Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)<br />
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)</p>
<p>新浪爱问爬虫<br />
iaskspider/2.0(+http://iask.com/help/help_index.html)<br />
Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)</p>
<p>搜狗爬虫<br />
Sogou web spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07″)<br />
Sogou Push Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07″)<br />
【早期用法：“sogou spider”】</p>
<p>Google爬虫<br />
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)</p>
<p>Google AdSense广告内容匹配爬虫<br />
Mediapartners-Google/2.1</p>
<p>网易爬虫<br />
Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.yodao.com/help/webmaster/spider/;)<br />
【早期采用“ OutfoxBot/0.5 (for internet experiments; http://”; outfoxbot@gmail.com)”】</p>
<p>Alexa排名爬虫<br />
ia_archiver</p>
<p>MSN爬虫<br />
msnbot/1.0 (+http://search.msn.com/msnbot.htm)<br />
特点未知<br />
msnbot-media/1.0 (+http://search.msn.com/msnbot.htm)</p>
<p>据称为北大天网的搜索引擎爬虫程序<br />
P.Arthur 1.1</p>
<p>看来是Qihoo的<br />
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)</p>
<p>Gigabot搜索引擎爬虫<br />
Gigabot/2.0 (http://www.gigablast.com/spider.html)</p>
<p>来源 互联网 参考<a href="http://www.160km.com/bear/?p=14">如何识别搜索引擎爬虫</a><br />
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/linux-show-service-version.html" title="查看各种服务的版本">查看各种服务的版本</a></li>
<li><a href="http://www.foolbirds.com/component-slot-in-symfony.html" title="Symfony中组件槽(Component Slot)的应用">Symfony中组件槽(Component Slot)的应用</a></li>
<li><a href="http://www.foolbirds.com/symfony12-upload-file-and-validate.html" title="symfony1.2中的文件上传和验证">symfony1.2中的文件上传和验证</a></li>
<li><a href="http://www.foolbirds.com/add-table-prefix-in-symfony.html" title="Add table prefix  in symfony－在symfony中使用表前缀">Add table prefix  in symfony－在symfony中使用表前缀</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/ubuntu-install-phpmyadmin-with-apt-get.html" title="Ubuntu apt-get方法安装phpmyadmin">Ubuntu apt-get方法安装phpmyadmin</a></li>
<li><a href="http://www.foolbirds.com/git-patch.html" title="版本控制工具GIT的使用（一）分机打补丁">版本控制工具GIT的使用（一）分机打补丁</a></li>
<li><a href="http://www.foolbirds.com/to-be-a-symfony-contributor.html" title="成为一名symfony文档贡献者.">成为一名symfony文档贡献者.</a></li>
<li><a href="http://www.foolbirds.com/1072.html" title="打鸟游戏修改版">打鸟游戏修改版</a></li>
<li><a href="http://www.foolbirds.com/redirect-and-forward-in-symfony.html" title="跳并快乐着－symfony跳转指南">跳并快乐着－symfony跳转指南</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/%e5%88%a4%e6%96%ad%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%88%ac%e8%99%ab.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）</title>
		<link>http://www.foolbirds.com/how-to-embed-forms-in-symfony-12-admin-generator.html</link>
		<comments>http://www.foolbirds.com/how-to-embed-forms-in-symfony-12-admin-generator.html#comments</comments>
		<pubDate>Thu, 18 Jun 2009 15:31:10 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[关联]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=862</guid>
		<description><![CDATA[译者：Maker.Wang[at]gmail.com
原文：http://sandbox-ws.com/how-to-embed-forms-in-symfony-12-admin-generator
译者注： Embed form是一个被忽略了的却很实用的技术，可能是由于embed form是新功能的缘故，相关的文档非常少，特别是中文文档，很早以前就听说了embed form，但一直没有机会实际应用， 昨天项目的新需求让我又想起了embed form， 所以又翻出了以前看过的文档， 仔细复习一遍， 同时也翻译出来分享个各位战友们。这是小弟的第一篇译文，难免有错误和遗漏，希望大家多包涵，多提宝贵意见。 &#8211; maker 2009.6.19
第一部分. 一对一关联内嵌表单

Symfony 1.2 添加了很多令人兴奋的新特性，并已经成为了一个很好很强大的PHP开发框架。 其中的一个特性是将一个Form嵌入另一个Form中。那么这意味着什么呢？
第一个模型如下图所示：
 上图是一个公司和联系方式的一对一关系模型。
这是我们的 schema.yml:


propel: 
 _attributes: 
 package: lib.model 
 defaultIdMethod: native 
 company: 
 _attributes: { phpName: Company } 
 id: { type: INTEGER, size: &#8216;11&#8242;, primaryKey: true, autoIncrement: true, required: true } 
 name: { type: VARCHAR, size: &#8216;255&#8242;, required: true } 
 contact_id: { type: INTEGER, size: &#8216;11&#8242;, required: false, foreignTable: contact, foreignReference: id, onDelete: SET NULL, onUpdate: RESTRICT } 
 _indexes: { company_FI_1: [contact_id] } 
 contact: 
 _attributes: { phpName: Contact } 
 id: { type: INTEGER, size: &#8216;11&#8242;, primaryKey: true, autoIncrement: true, required: true } 
 [...]]]></description>
			<content:encoded><![CDATA[<p>译者：<a title="Maker's Blog" href="http://foolbird.net" target="_blank">Maker.Wang[at]gmail.com</a><br />
原文：<a href="http://sandbox-ws.com/how-to-embed-forms-in-symfony-12-admin-generator">http://sandbox-ws.com/how-to-embed-forms-in-symfony-12-admin-generator</a></p>
<p>译者注： Embed form是一个被忽略了的却很实用的技术，可能是由于embed form是新功能的缘故，相关的文档非常少，特别是中文文档，很早以前就听说了embed form，但一直没有机会实际应用， 昨天项目的新需求让我又想起了embed form， 所以又翻出了以前看过的文档， 仔细复习一遍， 同时也翻译出来分享个各位战友们。这是小弟的第一篇译文，难免有错误和遗漏，希望大家多包涵，多提宝贵意见。 &#8211; maker 2009.6.19</p>
<p><strong>第一部分. 一对一关联内嵌表单<br />
</strong></p>
<p>Symfony 1.2 添加了很多令人兴奋的新特性，并已经成为了一个很好很强大的PHP开发框架。 其中的一个特性是将一个Form嵌入另一个Form中。那么这意味着什么呢？</p>
<p>第一个模型如下图所示：</p>
<p><img class="aligncenter size-full wp-image-889" title="company_contact" src="http://www.foolbirds.com/wp-content/uploads/2009/06/company_contact.jpg" alt="company_contact" width="516" height="117" /> 上图是一个公司和联系方式的一对一关系模型。</p>
<p>这是我们的 schema.yml:</p>
<div class="dp-highlighter">
<ol class="dp-cpp">
<li class="alt"><span><span>propel: </span></span></li>
<li><span> _attributes: </span></li>
<li class="alt"><span> package: lib.model </span></li>
<li><span> defaultIdMethod: native </span></li>
<li class="alt"><span> company: </span></li>
<li><span> _attributes: { phpName: Company } </span></li>
<li class="alt"><span> id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, primaryKey: </span><span class="keyword">true</span><span>, autoIncrement: </span><span class="keyword">true</span><span>, required: </span><span class="keyword">true</span><span> } </span></span></li>
<li><span> name: { type: VARCHAR, size: <span class="string">&#8216;255&#8242;</span><span>, required: </span><span class="keyword">true</span><span> } </span></span></li>
<li class="alt"><span> contact_id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, required: </span><span class="keyword">false</span><span>, foreignTable: contact, foreignReference: id, onDelete: SET NULL, onUpdate: RESTRICT } </span></span></li>
<li><span> _indexes: { company_FI_1: [contact_id] } </span></li>
<li class="alt"><span> contact: </span></li>
<li><span> _attributes: { phpName: Contact } </span></li>
<li class="alt"><span> id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, primaryKey: </span><span class="keyword">true</span><span>, autoIncrement: </span><span class="keyword">true</span><span>, required: </span><span class="keyword">true</span><span> } </span></span></li>
<li><span> first_name: { type: VARCHAR, size: <span class="string">&#8216;255&#8242;</span><span>, required: </span><span class="keyword">true</span><span> } </span></span></li>
<li class="alt"><span> last_name: { type: VARCHAR, size: <span class="string">&#8216;255&#8242;</span><span>, required: </span><span class="keyword">true</span><span> } </span></span></li>
<li><span> company_id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, required: </span><span class="keyword">false</span><span>, foreignTable: company, foreignReference: id, onDelete: SET NULL, onUpdate: RESTRICT } </span></span></li>
<li class="alt"><span> _indexes: { contact_FI_1: [company_id] } </span></li>
</ol>
</div>
<pre class="c" style="display: none;">propel:
  _attributes:
    package: lib.model
    defaultIdMethod: native
  company:
    _attributes: { phpName: Company }
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    name: { type: VARCHAR, size: '255', required: true }
    contact_id: { type: INTEGER, size: '11', required: false, foreignTable: contact, foreignReference: id, onDelete: SET NULL, onUpdate: RESTRICT }
    _indexes: { company_FI_1: [contact_id] }
  contact:
    _attributes: { phpName: Contact }
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    first_name: { type: VARCHAR, size: '255', required: true }
    last_name: { type: VARCHAR, size: '255', required: true }
    company_id: { type: INTEGER, size: '11', required: false, foreignTable: company, foreignReference: id, onDelete: SET NULL, onUpdate: RESTRICT }
    _indexes: { contact_FI_1: [company_id] }</pre>
<p>要注意的是这里的两个外键并不是必须存在（required）的，但是必须有了这两个外键我们才能将Contact Form嵌入到Company Form。</p>
<p>现在我们已经有了Schema, 让我们生成sql语句，模型（models）, 表单（forms）, 过滤器（filters）, 并且创建数据表。</p>
<div class="dp-highlighter">
<ol class="dp-cpp">
<li class="alt"><span><span>$ php symfony propel:build-sql </span></span></li>
<li><span>$ php symfony propel:build-model </span></li>
<li class="alt"><span>$ php symfony propel:build-forms </span></li>
<li><span>$ php symfony propel:build-filters </span></li>
<li class="alt"><span>$ php symfony propel:insert-sql &#8211;env=dev<br />
</span></li>
</ol>
<p>译者注：上面这组命令我们也可以简单的使用一个命令来完成</p></div>
<div class="dp-highlighter">
<ol class="dp-cpp">
<li><span>$ php symfony propel:build-all</span></li>
</ol>
</div>
<pre class="c" style="display: none;">$ php symfony propel:build-sql
$ php symfony propel:build-model
$ php symfony propel:build-forms
$ php symfony propel:build-filters
$ php symfony propel:insert-sql --env=dev</pre>
<p>现在我们使用symfony中的admin generator来生成一个模块, 来看看如何生成和操作他们之间的关联。</p>
<div class="dp-highlighter">
<ol class="dp-cpp">
<li class="alt"><span><span>$ php symfony propel:generate-admin backend Company </span></span></li>
</ol>
</div>
<pre class="c" style="display: none;">$ php symfony propel:generate-admin backend Company</pre>
<p style="text-align: center;">我们生成了如下图所示的模块：</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-890" title="company_1" src="http://www.foolbirds.com/wp-content/uploads/2009/06/company_1.jpg" alt="company_1" width="560" height="150" />现在如果我们点击“New&#8221;链接我们将看到界面如下：</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-891" title="company_2" src="http://www.foolbirds.com/wp-content/uploads/2009/06/company_2.jpg" alt="company_2" width="560" height="146" /></p>
<p>注意外键&#8221;contact_id&#8221;被admin generator处理成一个下拉列表，当然这不是我们想要的结果，我们需要在新建Company的同时创建Contact. 感谢symfony 1.2 支持表单内嵌， 这会使我们的工作变得非常简单。</p>
<p>首先打开 &#8220;CompanyForm.class.php&#8221; 并且输入代码如下：</p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> configure() { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// get Contact model object</span><span> </span></span></li>
<li><span> <span class="vars">$contact</span><span> = </span><span class="vars">$this</span><span>-&gt;getObject()-&gt;getContact(); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// contact object is null</span><span> </span></span></li>
<li class="alt"><span> <span class="keyword">if</span><span> (</span><span class="func">is_null</span><span>(</span><span class="vars">$contact</span><span>)) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// create a new Contact object</span><span> </span></span></li>
<li><span> <span class="vars">$contact</span><span> = </span><span class="keyword">new</span><span> Contact(); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// set the copmany of the newly created object to the current company</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$contact</span><span>-&gt;setCompany(</span><span class="vars">$this</span><span>-&gt;getObject()); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set the contact of the current company</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;getObject()-&gt;setContact(</span><span class="vars">$contact</span><span>); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> } </span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// create a new contact form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$contact_form</span><span> = </span><span class="keyword">new</span><span> ContactForm(</span><span class="vars">$contact</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// embed the contact form in the current company form</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;embedForm(</span><span class="string">&#8216;contact&#8217;</span><span>, </span><span class="vars">$contact_form</span><span>); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// remove the contact_id from the form</span><span> </span></span></li>
<li class="alt"><span> unset(<span class="vars">$this</span><span>[</span><span class="string">'contact_id'</span><span>]); </span></span></li>
<li><span> </span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function configure() {

	// get Contact model object
	$contact = $this-&gt;getObject()-&gt;getContact();

	// contact object is null
	if (is_null($contact)) {

		// create a new Contact object
		$contact = new Contact();

		// set the copmany of the newly created object to the current company
		$contact-&gt;setCompany($this-&gt;getObject());

		// set the contact of the current company
		$this-&gt;getObject()-&gt;setContact($contact);

	}

	// create a new contact form
	$contact_form = new ContactForm($contact);

	// embed the contact form in the current company form
	$this-&gt;embedForm('contact', $contact_form);

	// remove the contact_id from the form
	unset($this['contact_id']);

}</pre>
<p>接下来，打开ContactForm.class.php 并输入代码如下：</p>
<div class="dp-highlighter">
<ol class="dp-cpp">
<li class="alt"><span><span class="keyword">public</span><span> function configure() { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> unset($<span class="keyword">this</span><span>[</span><span class="string">'company_id'</span><span>]); </span></span></li>
<li><span> </span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="c" style="display: none;">public function configure() {

	unset($this['company_id']);

}</pre>
<p>现在修改模型类Company.php，在删除Contact的同时删除关联的Company</p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> </span><span class="func">delete</span><span>(PropelPDO </span><span class="vars">$con</span><span> = null) { </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;getContact()-&gt;</span><span class="func">delete</span><span>(</span><span class="vars">$con</span><span>); </span></span></li>
<li class="alt"><span> parent::<span class="func">delete</span><span>(</span><span class="vars">$con</span><span>); </span></span></li>
<li><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function delete(PropelPDO $con = null) {
	$this-&gt;getContact()-&gt;delete($con);
	parent::delete($con);
}</pre>
<p>最后一点也是很重要的，编辑generator.yml如下（这一步不是必须得） ：</p>
<div class="dp-highlighter">
<ol class="dp-cpp">
<li class="alt"><span><span>generator: </span></span></li>
<li><span> <span class="keyword">class</span><span>: sfPropelGenerator </span></span></li>
<li class="alt"><span> param: </span></li>
<li><span> model_class:           Company </span></li>
<li class="alt"><span> theme:                 admin </span></li>
<li><span> non_verbose_templates: <span class="keyword">true</span><span> </span></span></li>
<li class="alt"><span> with_show:             <span class="keyword">false</span><span> </span></span></li>
<li><span> singular:              ~ </span></li>
<li class="alt"><span> plural:                ~ </span></li>
<li><span> route_prefix:          company </span></li>
<li class="alt"><span> with_propel_route:     1 </span></li>
<li><span> </span></li>
<li class="alt"><span> config: </span></li>
<li><span> actions: ~ </span></li>
<li class="alt"><span> fields: </span></li>
<li><span> contact_id: { label: Company Contact } </span></li>
<li class="alt"><span> list: </span></li>
<li><span> display: [=name, contact] </span></li>
<li class="alt"><span> filter:  ~ </span></li>
<li><span> form:    ~ </span></li>
<li class="alt"><span> edit:    ~ </span></li>
<li><span> <span class="keyword">new</span><span>:     ~ </span></span></li>
</ol>
</div>
<pre class="c" style="display: none;">generator:
  class: sfPropelGenerator
  param:
    model_class:           Company
    theme:                 admin
    non_verbose_templates: true
    with_show:             false
    singular:              ~
    plural:                ~
    route_prefix:          company
    with_propel_route:     1

    config:
      actions: ~
      fields:
          contact_id: { label: Company Contact }
      list:
          display: [=name, contact]
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~</pre>
<p style="text-align: center;">现在进入新建&#8221;Company&#8221;页面你会看到如图所示：</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-892" title="company_3" src="http://www.foolbirds.com/wp-content/uploads/2009/06/company_3.jpg" alt="company_3" width="560" height="198" />尝试添加，编辑和删除一些记录以便确认一切是正确的。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-893" title="company_4" src="http://www.foolbirds.com/wp-content/uploads/2009/06/company_4.jpg" alt="company_4" width="560" height="183" /></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-894" title="company_5" src="http://www.foolbirds.com/wp-content/uploads/2009/06/company_5.jpg" alt="company_5" width="560" height="189" /></p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: left;"><strong>第二部分. 一对多关联的内嵌</strong><strong>表单</strong></p>
<p>在文章的第一部分我们讲解了如何实一对一关联的表单内嵌。但是我们经常需要在编辑父对象的时候编辑或者添加子对象， 这并不是我们要使用admin generator的原因，总之在这部分文章里我们将要讲解一对多关系的表单内嵌。</p>
<p>在开始之前，我们看到的是最终要实现的CategoryForm。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-895" title="embed_2" src="http://www.foolbirds.com/wp-content/uploads/2009/06/embed_2.png" alt="embed_2" width="592" height="309" /></p>
<p>本文需要的文件</p>
<ul>
<li><a href="http://www.foolbirds.com/wp-content/uploads/2009/06/sfWidgetFormInputDelete.class.php.zip">sfWidgetFormInputDelete.class.php</a></li>
</ul>
<p>Ok, 我们开始吧，考虑下面这个schema：</p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span>category: </span></span></li>
<li><span> _attributes: { phpName: Category } </span></li>
<li class="alt"><span> id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, primaryKey: true, autoIncrement: true, required: true } </span></span></li>
<li><span> name: { type: VARCHAR, size: <span class="string">&#8216;255&#8242;</span><span>, required: true } </span></span></li>
<li class="alt"><span> created_at: { type: TIMESTAMP, required: false } </span></li>
<li><span> updated_at: { type: TIMESTAMP, required: false } </span></li>
<li class="alt"><span>subcategory: </span></li>
<li><span> _attributes: { phpName: Subcategory } </span></li>
<li class="alt"><span> id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, primaryKey: true, autoIncrement: true, required: true } </span></span></li>
<li><span> name: { type: VARCHAR, size: <span class="string">&#8216;255&#8242;</span><span>, required: true } </span></span></li>
<li class="alt"><span> category_id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, required: true, foreignTable: category, foreignReference: id, onDelete: CASCADE, onUpdate: RESTRICT } </span></span></li>
<li><span> created_at: { type: TIMESTAMP, required: false } </span></li>
<li class="alt"><span> updated_at: { type: TIMESTAMP, required: false } </span></li>
</ol>
</div>
<pre class="php" style="display: none;">category:
    _attributes: { phpName: Category }
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    name: { type: VARCHAR, size: '255', required: true }
    created_at: { type: TIMESTAMP, required: false }
    updated_at: { type: TIMESTAMP, required: false }
subcategory:
    _attributes: { phpName: Subcategory }
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    name: { type: VARCHAR, size: '255', required: true }
    category_id: { type: INTEGER, size: '11', required: true, foreignTable: category, foreignReference: id, onDelete: CASCADE, onUpdate: RESTRICT }
    created_at: { type: TIMESTAMP, required: false }
    updated_at: { type: TIMESTAMP, required: false }</pre>
<p>为了实现想要的效果，我们需要需要采取以下步骤</p>
<ol>
<li>修改CategoryForm去包含当前分类所有的子分类的内嵌表单。</li>
<li>修改Widget中的子分类的name</li>
<li>修改CategoryForm添加一个空白的创建新子分类的表单。</li>
<li>重写sfForm类的bind方法，如果name域是空白则跳过保存(saving)和验证(validating)新子分类的表单。</li>
<li>在SubcategoryForm去掉全部的域（fields)</li>
</ol>
<p>为当前分类插入全部子分类的内嵌表单[第1，2，3步]</p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="comment">// lib/forms/CategoryForm.class.php</span><span> </span></span></li>
<li><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> configure() { </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// remove timestamps</span><span> </span></span></li>
<li class="alt"><span> unset(<span class="vars">$this</span><span>[</span><span class="string">'created_at'</span><span>], </span><span class="vars">$this</span><span>[</span><span class="string">'updated_at'</span><span>]); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// embed forms only when editing</span><span> </span></span></li>
<li><span> <span class="keyword">if</span><span> (!</span><span class="vars">$this</span><span>-&gt;isNew()) { </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// embed all subcategory forms</span><span> </span></span></li>
<li class="alt"><span> <span class="keyword">foreach</span><span> (</span><span class="vars">$this</span><span>-&gt;getObject()-&gt;getSubcategorys() </span><span class="keyword">as</span><span> </span><span class="vars">$subcategory</span><span>) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// create a new subcategory form for the current subcategory model object</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_form</span><span> = </span><span class="keyword">new</span><span> SubcategoryForm(</span><span class="vars">$subcategory</span><span>); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// embed the subcategory form in the main category form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;embedForm(</span><span class="string">&#8217;subcategory&#8217;</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getId(), </span><span class="vars">$subcategory_form</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set a custom label for the embedded form</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;widgetSchema[</span><span class="string">'subcategory'</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getId()]-&gt;setLabel(</span><span class="string">&#8216;Subcategory: &#8217;</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getName()); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// change the name widget to sfWidgetFormInputDelete</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;widgetSchema[</span><span class="string">'subcategory'</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getId()][</span><span class="string">'name'</span><span>] = </span><span class="keyword">new</span><span> sfWidgetFormInputDelete(</span><span class="keyword">array</span><span>( </span></span></li>
<li><span> <span class="string">&#8216;url&#8217;</span><span> =&gt; </span><span class="string">&#8216;category/deleteSubcategory&#8217;</span><span>, </span><span class="comment">// required</span><span> </span></span></li>
<li class="alt"><span> <span class="string">&#8216;model_id&#8217;</span><span> =&gt; </span><span class="vars">$subcategory</span><span>-&gt;getId(), </span><span class="comment">// required</span><span> </span></span></li>
<li><span> <span class="string">&#8216;confirm&#8217;</span><span> =&gt; </span><span class="string">&#8216;Sure???&#8217;</span><span>, </span><span class="comment">// optional</span><span> </span></span></li>
<li class="alt"><span> )); </span></li>
<li><span> </span></li>
<li class="alt"><span> } </span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// create a new subcategory form for a new subcategory model object</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_form</span><span> = </span><span class="keyword">new</span><span> SubcategoryForm(); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// embed the subcategory form in the main category form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;embedForm(</span><span class="string">&#8217;subcategory&#8217;</span><span>, </span><span class="vars">$subcategory_form</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set a custom label for the embedded form</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;widgetSchema[</span><span class="string">'subcategory'</span><span>]-&gt;setLabel(</span><span class="string">&#8216;New Subcategory&#8217;</span><span>); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> } </span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">// lib/forms/CategoryForm.class.php
public function configure() {

  // remove timestamps
  unset($this['created_at'], $this['updated_at']);

  // embed forms only when editing
  if (!$this-&gt;isNew()) {

    // embed all subcategory forms
    foreach ($this-&gt;getObject()-&gt;getSubcategorys() as $subcategory) {

    // create a new subcategory form for the current subcategory model object
    $subcategory_form = new SubcategoryForm($subcategory);

    // embed the subcategory form in the main category form
    $this-&gt;embedForm('subcategory'.$subcategory-&gt;getId(), $subcategory_form);

    // set a custom label for the embedded form
    $this-&gt;widgetSchema['subcategory'.$subcategory-&gt;getId()]-&gt;setLabel('Subcategory: '.$subcategory-&gt;getName());

    // change the name widget to sfWidgetFormInputDelete
    $this-&gt;widgetSchema['subcategory'.$subcategory-&gt;getId()]['name'] = new sfWidgetFormInputDelete(array(
    'url' =&gt; 'category/deleteSubcategory',      // required
    'model_id' =&gt; $subcategory-&gt;getId(),        // required
    'confirm' =&gt; 'Sure???',                     // optional
    ));

  }

  // create a new subcategory form for a new subcategory model object
  $subcategory_form = new SubcategoryForm();

  // embed the subcategory form in the main category form
  $this-&gt;embedForm('subcategory', $subcategory_form);

  // set a custom label for the embedded form
  $this-&gt;widgetSchema['subcategory']-&gt;setLabel('New Subcategory');

  }
}</pre>
<p>重写bind方法</p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> bind(</span><span class="keyword">array</span><span> </span><span class="vars">$taintedValues</span><span> = null, </span><span class="keyword">array</span><span> </span><span class="vars">$taintedFiles</span><span> = null) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// remove the embedded new form if the name field was not provided</span><span> </span></span></li>
<li><span> <span class="keyword">if</span><span> (</span><span class="func">is_null</span><span>(</span><span class="vars">$taintedValues</span><span>[</span><span class="string">'subcategory'</span><span>][</span><span class="string">'name'</span><span>]) || </span><span class="func">strlen</span><span>(</span><span class="vars">$taintedValues</span><span>[</span><span class="string">'subcategory'</span><span>][</span><span class="string">'name'</span><span>]) === 0 ) { </span></span></li>
<li class="alt"><span> </span></li>
<li><span> unset(<span class="vars">$this</span><span>-&gt;embeddedForms[</span><span class="string">'subcategory'</span><span>], </span><span class="vars">$taintedValues</span><span>[</span><span class="string">'subcategory'</span><span>]); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// pass the new form validations</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;validatorSchema[</span><span class="string">'subcategory'</span><span>] = </span><span class="keyword">new</span><span> sfValidatorPass(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> } <span class="keyword">else</span><span> { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set the category of the new subcategory form object</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;embeddedForms[</span><span class="string">'subcategory'</span><span>]-&gt;getObject()-&gt;setCategory(</span><span class="vars">$this</span><span>-&gt;getObject()); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> } </span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// call parent bind method</span><span> </span></span></li>
<li class="alt"><span> parent::bind(<span class="vars">$taintedValues</span><span>, </span><span class="vars">$taintedFiles</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function bind(array $taintedValues = null, array $taintedFiles = null) {

	// remove the embedded new form if the name field was not provided
	if (is_null($taintedValues['subcategory']['name']) || strlen($taintedValues['subcategory']['name']) === 0 ) {

		unset($this-&gt;embeddedForms['subcategory'], $taintedValues['subcategory']);

		// pass the new form validations
		$this-&gt;validatorSchema['subcategory'] = new sfValidatorPass();

	} else {

		// set the category of the new subcategory form object
		$this-&gt;embeddedForms['subcategory']-&gt;getObject()-&gt;setCategory($this-&gt;getObject());

	}

	// call parent bind method
	parent::bind($taintedValues, $taintedFiles);

}</pre>
<p>在SubcategoryForm中的域</p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> configure(){ </span></span></li>
<li><span> unset(<span class="vars">$this</span><span>[</span><span class="string">'created_at'</span><span>], </span><span class="vars">$this</span><span>[</span><span class="string">'updated_at'</span><span>], </span><span class="vars">$this</span><span>[</span><span class="string">'category_id'</span><span>]); </span></span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function configure(){
  unset($this['created_at'], $this['updated_at'], $this['category_id']);
}</pre>
<p>现在我们在分类模块下创建deleteSubcategory动作<strong><br />
</strong></p>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="comment">// apps/backend/modules/category/actions/actions.class.php</span><span> </span></span></li>
<li><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> executeDeleteSubcategory(sfWebRequest </span><span class="vars">$request</span><span>) { </span></span></li>
<li class="alt"><span> <span class="vars">$sub_category</span><span> = SubcategoryPeer::retrieveByPk(</span><span class="vars">$request</span><span>-&gt;getParameter(</span><span class="string">&#8216;id&#8217;</span><span>)); </span></span></li>
<li><span> <span class="vars">$sub_category</span><span>-&gt;</span><span class="func">delete</span><span>(); </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;redirect(</span><span class="string">&#8216;@category_edit?id=&#8217;</span><span>.</span><span class="vars">$sub_category</span><span>-&gt;getCategory()-&gt;getId()); </span></span></li>
<li><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">// apps/backend/modules/category/actions/actions.class.php
public function executeDeleteSubcategory(sfWebRequest $request) {
  $sub_category = SubcategoryPeer::retrieveByPk($request-&gt;getParameter('id'));
  $sub_category-&gt;delete();
  $this-&gt;redirect('@category_edit?id='.$sub_category-&gt;getCategory()-&gt;getId());
}</pre>
<p>就是这样了，我希望你会喜欢这篇文章。</p>
<p><strong>第三部分. 内嵌表单的本地化<br />
</strong></p>
<p>在本系列文章的上一部分我们介绍了在父对象中编辑多个子对象的方法。 在本部分钟我们将给子对象添加本地化行为， 为了更清楚的知道我们要做的事先看一下最终的效果。</p>
<p><a href="http://www.foolbirds.com/wp-content/uploads/2009/06/embed_i18n.png"><img class="aligncenter size-full wp-image-897" title="embed_i18n" src="http://www.foolbirds.com/wp-content/uploads/2009/06/embed_i18n.png" alt="embed_i18n" width="540" height="330" /></a></p>
<p>在开始之前，如果你没准备好，我强烈建议你去阅读一下第1，2部分。 OK， 我们开始吧，我们将要修改以下文件：</p>
<ul>
<li><strong>CategoryForm.class.php</strong> 分类模型的表单</li>
<li><strong>SubcategoryI18nForm.class.php</strong> 子分类模型的本地化模型的表单</li>
<li><strong>Subcategory.class.php</strong> 子分类模型</li>
</ul>
<p>本文的附件</p>
<ul>
<li><a href="http://www.foolbirds.com/wp-content/uploads/2009/06/sfWidgetFormInputDelete.class.php.zip">sfWidgetFormInputDelete.class.php</a></li>
</ul>
<h4>Schema.yml</h4>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span>category: </span></span></li>
<li><span> _attributes: { phpName: Category } </span></li>
<li class="alt"><span> id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, primaryKey: true, autoIncrement: true, required: true } </span></span></li>
<li><span> name: { type: VARCHAR, size: <span class="string">&#8216;255&#8242;</span><span>, required: true } </span></span></li>
<li class="alt"><span> created_at: { type: TIMESTAMP, required: false } </span></li>
<li><span> updated_at: { type: TIMESTAMP, required: false } </span></li>
<li class="alt"><span>subcategory: </span></li>
<li><span> _attributes: { phpName: Subcategory, isI18N: true, i18nTable: subcategory_i18n } </span></li>
<li class="alt"><span> id:          { type: integer, required: true, primaryKey: true, autoincrement: true } </span></li>
<li><span> category_id: { type: INTEGER, size: <span class="string">&#8216;11&#8242;</span><span>, required: true, foreignTable: category, foreignReference: id, onDelete: CASCADE} </span></span></li>
<li class="alt"><span> created_at: { type: TIMESTAMP, required: false } </span></li>
<li><span> updated_at: { type: TIMESTAMP, required: false } </span></li>
<li class="alt"><span> </span></li>
<li><span>subcategory_i18n: </span></li>
<li class="alt"><span> _attributes: { phpName: SubcategoryI18n } </span></li>
<li><span> id:          { type: integer, required: true, primaryKey: true, foreignTable: subcategory, foreignReference: id, onDelete: CASCADE } </span></li>
<li class="alt"><span> culture:     { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true } </span></li>
<li><span> name:        { type: varchar, size: 50 } </span></li>
</ol>
</div>
<pre class="php" style="display: none;">  category:
      _attributes: { phpName: Category }
      id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
      name: { type: VARCHAR, size: '255', required: true }
      created_at: { type: TIMESTAMP, required: false }
      updated_at: { type: TIMESTAMP, required: false }
  subcategory:
      _attributes: { phpName: Subcategory, isI18N: true, i18nTable: subcategory_i18n }
      id:          { type: integer, required: true, primaryKey: true, autoincrement: true }
      category_id: { type: INTEGER, size: '11', required: true, foreignTable: category, foreignReference: id, onDelete: CASCADE}
      created_at: { type: TIMESTAMP, required: false }
      updated_at: { type: TIMESTAMP, required: false }

  subcategory_i18n:
    _attributes: { phpName: SubcategoryI18n }
    id:          { type: integer, required: true, primaryKey: true, foreignTable: subcategory, foreignReference: id, onDelete: CASCADE }
    culture:     { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true }
    name:        { type: varchar, size: 50 }</pre>
<h4>SubcategoryI18nForm.class.php</h4>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> configure() { </span></span></li>
<li><span> unset(<span class="vars">$this</span><span>[</span><span class="string">'culture'</span><span>], </span><span class="vars">$this</span><span>[</span><span class="string">'id'</span><span>]); </span></span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function configure() {
    unset($this['culture'], $this['id']);
}</pre>
<h4>Subcategory.class.php</h4>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> getI18nObject(</span><span class="vars">$culture</span><span> = </span><span class="string">&#8216;en&#8217;</span><span>) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;setCulture(</span><span class="vars">$culture</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="vars">$i18ns</span><span> = </span><span class="vars">$this</span><span>-&gt;getSubcategoryI18ns(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="keyword">if</span><span> (isset(</span><span class="vars">$i18ns</span><span>[0])) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="keyword">return</span><span> </span><span class="vars">$i18ns</span><span>[0]; </span></span></li>
<li><span> </span></li>
<li class="alt"><span> } </span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="keyword">return</span><span> null; </span></span></li>
<li><span> </span></li>
<li class="alt"><span>} </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function getI18nObject($culture = 'en') {

    $this-&gt;setCulture($culture);

    $i18ns = $this-&gt;getSubcategoryI18ns();

    if (isset($i18ns[0])) {

        return $i18ns[0];

    }

    return null;

}</pre>
<h4>CategoryForm.class.php</h4>
<div class="dp-highlighter">
<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> configure() { </span></span></li>
<li><span> </span></li>
<li class="alt"><span><span class="comment">// remove timestamps</span><span> </span></span></li>
<li><span>unset(<span class="vars">$this</span><span>[</span><span class="string">'created_at'</span><span>], </span><span class="vars">$this</span><span>[</span><span class="string">'updated_at'</span><span>]); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// embed forms only when editing</span><span> </span></span></li>
<li class="alt"><span> <span class="keyword">if</span><span> (!</span><span class="vars">$this</span><span>-&gt;isNew()) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="vars">$user_culture</span><span> = sfContext::getInstance()-&gt;getUser()-&gt;getCulture(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// embed all subcategory forms</span><span> </span></span></li>
<li><span> <span class="keyword">foreach</span><span> (</span><span class="vars">$this</span><span>-&gt;getObject()-&gt;getSubcategorys() </span><span class="keyword">as</span><span> </span><span class="vars">$subcategory</span><span>) { </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// get the subcategory_i18n model object relative to the current user culture</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_i18n_object</span><span> = </span><span class="vars">$subcategory</span><span>-&gt;getI18nObject(</span><span class="vars">$user_culture</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// create a new subcategory_i18n form for the current subcategory model object</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_i18n_form</span><span> = </span><span class="keyword">new</span><span> SubcategoryI18nForm(</span><span class="vars">$subcategory</span><span>-&gt;getI18nObject(</span><span class="string">&#8216;en&#8217;</span><span>)); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// get widget schema of subcategory_i18n form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_i18n_form_widget_schema</span><span> = </span><span class="vars">$subcategory_i18n_form</span><span>-&gt;getWidgetSchema(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set the input delete widget</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_i18n_form_widget_schema</span><span>[</span><span class="string">'name'</span><span>] = </span><span class="keyword">new</span><span> sfWidgetFormInputDelete(</span><span class="keyword">array</span><span>( </span></span></li>
<li class="alt"><span> <span class="string">&#8216;url&#8217;</span><span> =&gt; </span><span class="string">&#8216;category/deleteSubcategory&#8217;</span><span>, </span><span class="comment">// required</span><span> </span></span></li>
<li><span> <span class="string">&#8216;model_id&#8217;</span><span> =&gt; </span><span class="vars">$subcategory</span><span>-&gt;getId(), </span><span class="comment">// required</span><span> </span></span></li>
<li class="alt"><span> <span class="string">&#8216;confirm&#8217;</span><span> =&gt; </span><span class="string">&#8216;Sure???&#8217;</span><span>, </span><span class="comment">// optional</span><span> </span></span></li>
<li><span> )); </span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// create a new subcategory form for the current subcategory model object</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_form</span><span> = </span><span class="keyword">new</span><span> SubcategoryForm(</span><span class="vars">$subcategory</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// embed the i18n form</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_form</span><span>-&gt;embedForm(</span><span class="string">&#8217;subcategory_i18n&#8217;</span><span>.</span><span class="vars">$subcategory_i18n_object</span><span>-&gt;getId(), </span><span class="vars">$subcategory_i18n_form</span><span>); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// subcategory form widget schema</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_form_widget_schema</span><span> = </span><span class="vars">$subcategory_form</span><span>-&gt;getWidgetSchema(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// disable label</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_form_widget_schema</span><span>[</span><span class="string">'subcategory_i18n'</span><span>.</span><span class="vars">$subcategory_i18n_object</span><span>-&gt;getId()]-&gt;setLabel(false); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// embed the subcategory form in the main category form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;embedForm(</span><span class="string">&#8217;subcategory&#8217;</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getId(), </span><span class="vars">$subcategory_form</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set a custom label for the embedded form</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;widgetSchema[</span><span class="string">'subcategory'</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getId()]-&gt;setLabel(</span><span class="string">&#8216;Subcategory: &#8217;</span><span>.</span><span class="vars">$subcategory</span><span>-&gt;getName()); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> } </span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// create a new subcategory form for a new subcategory model object</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_form</span><span> = </span><span class="keyword">new</span><span> SubcategoryForm(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// create a new subcategory form for a new subcategory_i18n model object</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_i18n_form</span><span> = </span><span class="keyword">new</span><span> SubcategoryI18nForm(); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// embed the subcategory_i18n form in the parent subcategory form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_form</span><span>-&gt;embedForm(</span><span class="string">&#8217;subcategory_i18n&#8217;</span><span>, </span><span class="vars">$subcategory_i18n_form</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// subcategory form widget schema</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_form_widget_schema</span><span> = </span><span class="vars">$subcategory_form</span><span>-&gt;getWidgetSchema(); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// disable label</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_form_widget_schema</span><span>[</span><span class="string">'subcategory_i18n'</span><span>]-&gt;setLabel(false); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// embed the subcategory form in the main category form</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;embedForm(</span><span class="string">&#8217;subcategory&#8217;</span><span>, </span><span class="vars">$subcategory_form</span><span>); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// set a custom label for the embedded form</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;widgetSchema[</span><span class="string">'subcategory'</span><span>]-&gt;setLabel(</span><span class="string">&#8216;New Subcategory&#8217;</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> } </span></li>
<li><span>} </span></li>
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> bind(</span><span class="keyword">array</span><span> </span><span class="vars">$taintedValues</span><span> = null, </span><span class="keyword">array</span><span> </span><span class="vars">$taintedFiles</span><span> = null) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="keyword">if</span><span>(!</span><span class="vars">$this</span><span>-&gt;isNew()) { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="vars">$user_culture</span><span> = sfContext::getInstance()-&gt;getUser()-&gt;getCulture(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// remove the embedded new form if the name field was not provided</span><span> </span></span></li>
<li><span> <span class="keyword">if</span><span> (</span><span class="func">is_null</span><span>(</span><span class="vars">$taintedValues</span><span>[</span><span class="string">'subcategory'</span><span>][</span><span class="string">'subcategory_i18n'</span><span>][</span><span class="string">'name'</span><span>]) || </span><span class="func">strlen</span><span>(</span><span class="vars">$taintedValues</span><span>[</span><span class="string">'subcategory'</span><span>][</span><span class="string">'subcategory_i18n'</span><span>][</span><span class="string">'name'</span><span>]) === 0 ) { </span></span></li>
<li class="alt"><span> </span></li>
<li><span> unset(<span class="vars">$this</span><span>-&gt;embeddedForms[</span><span class="string">'subcategory'</span><span>], </span><span class="vars">$taintedValues</span><span>[</span><span class="string">'subcategory'</span><span>]); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// pass the new form validations</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$this</span><span>-&gt;validatorSchema[</span><span class="string">'subcategory'</span><span>] = </span><span class="keyword">new</span><span> sfValidatorPass(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> } <span class="keyword">else</span><span> { </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set the category of the new subcategory form object</span><span> </span></span></li>
<li><span> <span class="vars">$this</span><span>-&gt;embeddedForms[</span><span class="string">'subcategory'</span><span>]-&gt;getObject()-&gt;setCategory(</span><span class="vars">$this</span><span>-&gt;getObject()); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// get subcategory embedded forms</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_embedded_forms</span><span> = </span><span class="vars">$this</span><span>-&gt;embeddedForms[</span><span class="string">'subcategory'</span><span>]-&gt;getEmbeddedForms(); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> <span class="comment">// set subcategory parent of the subcategory_i18n model object</span><span> </span></span></li>
<li><span> <span class="vars">$subcategory_embedded_forms</span><span>[</span><span class="string">'subcategory_i18n'</span><span>]-&gt;getObject()-&gt;setSubcategory(</span><span class="vars">$this</span><span>-&gt;embeddedForms[</span><span class="string">'subcategory'</span><span>]-&gt;getObject()); </span></span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// set the culture of the subcategory_i18n model object</span><span> </span></span></li>
<li class="alt"><span> <span class="vars">$subcategory_embedded_forms</span><span>[</span><span class="string">'subcategory_i18n'</span><span>]-&gt;getObject()-&gt;setCulture(</span><span class="vars">$user_culture</span><span>); </span></span></li>
<li><span> } </span></li>
<li class="alt"><span> </span></li>
<li><span> } </span></li>
<li class="alt"><span> </span></li>
<li><span> <span class="comment">// call parent bind method</span><span> </span></span></li>
<li class="alt"><span> parent::bind(<span class="vars">$taintedValues</span><span>, </span><span class="vars">$taintedFiles</span><span>); </span></span></li>
<li><span> </span></li>
<li class="alt"><span> } </span></li>
</ol>
</div>
<pre class="php" style="display: none;">public function configure() {

// remove timestamps
unset($this['created_at'], $this['updated_at']);

	// embed forms only when editing
	if (!$this-&gt;isNew()) {

		$user_culture = sfContext::getInstance()-&gt;getUser()-&gt;getCulture();

		// embed all subcategory forms
		foreach ($this-&gt;getObject()-&gt;getSubcategorys() as $subcategory) {

			// get the subcategory_i18n model object relative to the current user culture
			$subcategory_i18n_object = $subcategory-&gt;getI18nObject($user_culture);

			// create a new subcategory_i18n form for the current subcategory model object
			$subcategory_i18n_form = new SubcategoryI18nForm($subcategory-&gt;getI18nObject('en'));

			// get widget schema of subcategory_i18n form
			$subcategory_i18n_form_widget_schema = $subcategory_i18n_form-&gt;getWidgetSchema();

			// set the input delete widget
			$subcategory_i18n_form_widget_schema['name'] = new sfWidgetFormInputDelete(array(
			'url' =&gt; 'category/deleteSubcategory',      // required
			'model_id' =&gt; $subcategory-&gt;getId(),        // required
			'confirm' =&gt; 'Sure???',                     // optional
			));

			// create a new subcategory form for the current subcategory model object
			$subcategory_form = new SubcategoryForm($subcategory);

			// embed the i18n form
			$subcategory_form-&gt;embedForm('subcategory_i18n'.$subcategory_i18n_object-&gt;getId(), $subcategory_i18n_form);

			// subcategory form widget schema
			$subcategory_form_widget_schema = $subcategory_form-&gt;getWidgetSchema();

			// disable label
			$subcategory_form_widget_schema['subcategory_i18n'.$subcategory_i18n_object-&gt;getId()]-&gt;setLabel(false);

			// embed the subcategory form in the main category form
			$this-&gt;embedForm('subcategory'.$subcategory-&gt;getId(), $subcategory_form);

			// set a custom label for the embedded form
			$this-&gt;widgetSchema['subcategory'.$subcategory-&gt;getId()]-&gt;setLabel('Subcategory: '.$subcategory-&gt;getName());

		}

		// create a new subcategory form for a new subcategory model object
		$subcategory_form = new SubcategoryForm();

		// create a new subcategory form for a new subcategory_i18n model object
		$subcategory_i18n_form = new SubcategoryI18nForm();

		// embed the subcategory_i18n form in the parent subcategory form
		$subcategory_form-&gt;embedForm('subcategory_i18n', $subcategory_i18n_form);

		// subcategory form widget schema
		$subcategory_form_widget_schema = $subcategory_form-&gt;getWidgetSchema();

		// disable label
		$subcategory_form_widget_schema['subcategory_i18n']-&gt;setLabel(false);

		// embed the subcategory form in the main category form
		$this-&gt;embedForm('subcategory', $subcategory_form);

		// set a custom label for the embedded form
		$this-&gt;widgetSchema['subcategory']-&gt;setLabel('New Subcategory');

	}
}
public function bind(array $taintedValues = null, array $taintedFiles = null) {

		if(!$this-&gt;isNew()) {

			$user_culture = sfContext::getInstance()-&gt;getUser()-&gt;getCulture();

			// remove the embedded new form if the name field was not provided
			if (is_null($taintedValues['subcategory']['subcategory_i18n']['name']) || strlen($taintedValues['subcategory']['subcategory_i18n']['name']) === 0 ) {

				unset($this-&gt;embeddedForms['subcategory'], $taintedValues['subcategory']);

				// pass the new form validations
				$this-&gt;validatorSchema['subcategory'] = new sfValidatorPass();

			} else {

				// set the category of the new subcategory form object
				$this-&gt;embeddedForms['subcategory']-&gt;getObject()-&gt;setCategory($this-&gt;getObject());

				// get subcategory embedded forms
				$subcategory_embedded_forms = $this-&gt;embeddedForms['subcategory']-&gt;getEmbeddedForms();

				// set subcategory parent of the subcategory_i18n model object
				$subcategory_embedded_forms['subcategory_i18n']-&gt;getObject()-&gt;setSubcategory($this-&gt;embeddedForms['subcategory']-&gt;getObject());

				// set the culture of the subcategory_i18n model object
				$subcategory_embedded_forms['subcategory_i18n']-&gt;getObject()-&gt;setCulture($user_culture);
			}

		}

		// call parent bind method
		parent::bind($taintedValues, $taintedFiles);

	}</pre>
<p>正如你所看到的，这是功能需要你复制和粘贴大量的代码，这就是为什么我在使用扩展的Admin Generator,  为了当你生成管理模块的时候有此功能可用。
<ul class="related_post">
<li><a href="http://www.foolbirds.com/csrf-and-form.html" title="CSRF使用注意事项和form的标准用法">CSRF使用注意事项和form的标准用法</a></li>
<li><a href="http://www.foolbirds.com/symfony-references-with-propel.html" title="symfony数据表关联详解(for propel)">symfony数据表关联详解(for propel)</a></li>
<li><a href="http://www.foolbirds.com/symfony-form-offsetunset.html" title="Symfony中自定义form中offsetUnset的应用">Symfony中自定义form中offsetUnset的应用</a></li>
<li><a href="http://www.foolbirds.com/use-form.html" title="form使用一例">form使用一例</a></li>
<li><a href="http://www.foolbirds.com/form-create-and-edit.html" title="Form表单的新建、修改">Form表单的新建、修改</a></li>
<li><a href="http://www.foolbirds.com/symfony-latlng-widget-with-google-maps.html" title="编写widget一例:支持Google Maps的坐标输入框">编写widget一例:支持Google Maps的坐标输入框</a></li>
<li><a href="http://www.foolbirds.com/default-values-for-form.html" title="如何给表单项赋初值">如何给表单项赋初值</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/how-to-embed-forms-in-symfony-12-admin-generator.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Firefox 和 IE 中的键盘事件</title>
		<link>http://www.foolbirds.com/firefox-and-ie-pressup.html</link>
		<comments>http://www.foolbirds.com/firefox-and-ie-pressup.html#comments</comments>
		<pubDate>Wed, 27 May 2009 05:23:09 +0000</pubDate>
		<dc:creator>zhuozi</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[键盘事件]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=855</guid>
		<description><![CDATA[今天，在测试项目中的form表单的时候，发现了一些被遗忘的细节问题，邮政编码和电话没有被验证。
对于，symfony的form机制，验证起来很方便，利用这个框架不用像以前自己在前端写一大堆的js进行判断。
可是，毕竟客户的需求总是奇怪的，在新项目中，有一个地方没有办法直接应用symfony中的fomr机制，没有办法偷懒只用js了。
if(window.event) {   //IE键盘监控
if(e.keyCode&#60;48   &#124;&#124;   e.keyCode&#62;57&#124;&#124;e.keyCode==8) {
return false;
} else {
return true;
}
} else if(e.which) { // Firefox 键盘监控
if((e.which&#62;47)   &#38;&#38;   (e.which&#60;58)&#124;&#124;(e.which==8)) {
return true;
} else {
return false;
}
}

html代码
onkeypress="javascript:return key(event)

对于前端程序(css、js)来说，两大浏览器的兼容问题很是麻烦。
对于键盘事件，两个浏览器有着不同的理解。为了防止遗忘，把上面转载的程序在此备份，以便查找。
Random Posts

版本控制工具GIT的使用（二）主机打补丁
Symfony的路由规则
在symfony项目中应用TinyMCE
在admin generator中加入复杂的自定义列
symfony 1.4 数据库 utf8设置
CSRF使用注意事项和form的标准用法
symfony1.2使用1.0插件sfFeedPlugin一例
admin后台模板作用
Add table prefix  in symfony－在symfony中使用表前缀
插件使用一例:在form中加入拾色器

]]></description>
			<content:encoded><![CDATA[<p>今天，在测试项目中的form表单的时候，发现了一些被遗忘的细节问题，邮政编码和电话没有被验证。</p>
<p>对于，symfony的form机制，验证起来很方便，利用这个框架不用像以前自己在前端写一大堆的js进行判断。</p>
<p>可是，毕竟客户的需求总是奇怪的，在新项目中，有一个地方没有办法直接应用symfony中的fomr机制，没有办法偷懒只用js了。<br />
<code>if(window.event) {   //IE键盘监控<br />
if(e.keyCode&lt;48   ||   e.keyCode&gt;57||e.keyCode==8) {<br />
return false;<br />
} else {<br />
return true;<br />
}<br />
} else if(e.which) { // Firefox 键盘监控<br />
if((e.which&gt;47)   &amp;&amp;   (e.which&lt;58)||(e.which==8)) {<br />
return true;<br />
} else {<br />
return false;<br />
}<br />
}<br />
</code><br />
html代码<br />
<code>onkeypress="javascript:return key(event)<br />
</code><br />
对于前端程序(css、js)来说，两大浏览器的兼容问题很是麻烦。<br />
对于键盘事件，两个浏览器有着不同的理解。<strong>为了防止遗忘，把上面转载的程序在此备份，以便查找。</strong><br />
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/symfony-form-offsetunset.html" title="Symfony中自定义form中offsetUnset的应用">Symfony中自定义form中offsetUnset的应用</a></li>
<li><a href="http://www.foolbirds.com/wideimage-in-symfony.html" title="在Symfony中使用第三方图片处理工具WideImage">在Symfony中使用第三方图片处理工具WideImage</a></li>
<li><a href="http://www.foolbirds.com/how-to-embed-forms-in-symfony-12-admin-generator.html" title="内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）">内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）</a></li>
<li><a href="http://www.foolbirds.com/csrf-and-form.html" title="CSRF使用注意事项和form的标准用法">CSRF使用注意事项和form的标准用法</a></li>
<li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="后台模板结构">后台模板结构</a></li>
<li><a href="http://www.foolbirds.com/propel-criteria-in-symfony.html" title="Criteria详解">Criteria详解</a></li>
<li><a href="http://www.foolbirds.com/get-var-in-templates.html" title="如何在视图里接收变量">如何在视图里接收变量</a></li>
<li><a href="http://www.foolbirds.com/add-link-as-action-in-list.html" title="如何在List表单下面添加 链接 式动作 类似与新建">如何在List表单下面添加 链接 式动作 类似与新建</a></li>
<li><a href="http://www.foolbirds.com/add-tinymce-to-symfony.html" title="在symfony项目中应用TinyMCE">在symfony项目中应用TinyMCE</a></li>
<li><a href="http://www.foolbirds.com/symfony-routing.html" title="Symfony的路由规则">Symfony的路由规则</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/firefox-and-ie-pressup.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>怎么在app中构造其它app的链接(二)</title>
		<link>http://www.foolbirds.com/url-in-other-apps2.html</link>
		<comments>http://www.foolbirds.com/url-in-other-apps2.html#comments</comments>
		<pubDate>Mon, 25 May 2009 09:15:17 +0000</pubDate>
		<dc:creator>zhuozi</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=839</guid>
		<description><![CDATA[写一个class

// apps/backend/config/backendConfiguration.class.php
class backendConfiguration extends sfApplicationConfiguration
{
  protected $frontendRouting = null;
  public function generateFrontendUrl($name, $parameters = array())
  {
    return 'http://frontend.example.com'.$this->getFrontendRouting()
    ->generate($name, $parameters);
  }
  public function getFrontendRouting()
  {
    if (!$this->frontendRouting)
    {
      $this->frontendRouting = new sfPatternRouting(new [...]]]></description>
			<content:encoded><![CDATA[<p>写一个class<br />
<code><br />
// apps/backend/config/backendConfiguration.class.php<br />
class backendConfiguration extends sfApplicationConfiguration<br />
{<br />
  protected $frontendRouting = null;<br />
  public function generateFrontendUrl($name, $parameters = array())<br />
  {<br />
    return 'http://frontend.example.com'.$this->getFrontendRouting()<br />
    ->generate($name, $parameters);<br />
  }<br />
  public function getFrontendRouting()<br />
  {<br />
    if (!$this->frontendRouting)<br />
    {<br />
      $this->frontendRouting = new sfPatternRouting(new sfEventDispatcher());<br />
      $config = new sfRoutingConfigHandler();<br />
      $routes = $config->evaluate(array(sfConfig::get('sf_apps_dir').<br />
      '/frontend/config/routing.yml'));<br />
      $this->frontendRouting->setRoutes($routes);<br />
    }<br />
    return $this->frontendRouting;<br />
  }<br />
}<br />
</code></p>
<p>在action中可以用下面的动作，就可以跳到其它的app中的动作，下面的‘hello&#8217;，是frontend/config配置文件routing中的一条路由规则<br />
<code><br />
$this->redirect($this->getContext()->getConfiguration()-><br />
generateFrontendUrl('hello', array('name' => 'Bar')));<br />
</code><br />
<code><br />
function link_to_frontend($name, $parameters)<br />
{<br />
  return sfProjectConfiguration::getActive()-><br />
  generateFrontendUrl($name, $parameters);<br />
}<br />
</code></p>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/url-in-other-apps-one.html" title="怎么在app中构造其它app的链接(一)">怎么在app中构造其它app的链接(一)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/url-in-other-apps2.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>怎么在app中构造其它app的链接(一)</title>
		<link>http://www.foolbirds.com/url-in-other-apps-one.html</link>
		<comments>http://www.foolbirds.com/url-in-other-apps-one.html#comments</comments>
		<pubDate>Sat, 23 May 2009 08:44:30 +0000</pubDate>
		<dc:creator>zhuozi</dc:creator>
				<category><![CDATA[CentOS/Redhat]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=835</guid>
		<description><![CDATA[最近开发的一个项目要求我们要在一个app中构造另一个app中的链接并使用。
我们现在有一个管理平台，app名字   admin, 我们还有一个PC展示平台 app名字 pc
我们知道使用symfony中链接辅助函数  url_for()  可以生成我们想要的URL，可是，默认的情况下，这种生成出来的URL是显示前端控制器名字的（控制器名字根据所在开发模式的不同，显示的也不一样）。
比如： 我们在admin这个平台使用  url_for(&#8217;member/create&#8217;)    生成的url是   admin_dev.php/member/create， 很显然这种URL不是我们所期望的，我们不希望还要去解析判断。
在apps/myapps/settings.yml 中有一项设置  no_script_name: off  这项是控制时候在URL中显示前端控制器的名字。
当我们把它开启的时候，再使用url_for(&#8217;member/create&#8217;)的时候，就会生成  member/create, 这样就会得到没有前端控制器名字的URL。
其实，最理想的状态是，我在使用某一个链接辅助函数的时候，直接就可以获得某一个平台的URL，比如在admin的平台返回给我一个  http://www.foolbirds.com/pc_dev.php/article/show  这样的链接。 可是找了一下下午也没有找到一个，或许需要自己写一个构造这样的URL来满足项目的需求了。

怎么在app中构造其它app的链接(二)

]]></description>
			<content:encoded><![CDATA[<p>最近开发的一个项目要求我们要在一个app中构造另一个app中的链接并使用。</p>
<p>我们现在有一个管理平台，app名字   admin, 我们还有一个PC展示平台 app名字 pc</p>
<p>我们知道使用symfony中链接辅助函数  url_for()  可以生成我们想要的URL，可是，默认的情况下，这种生成出来的URL是显示前端控制器名字的（控制器名字根据所在开发模式的不同，显示的也不一样）。</p>
<p>比如： 我们在admin这个平台使用  url_for(&#8217;member/create&#8217;)    生成的url是   admin_dev.php/member/create， 很显然这种URL不是我们所期望的，我们不希望还要去解析判断。</p>
<p>在apps/myapps/settings.yml 中有一项设置  no_script_name: off  这项是控制时候在URL中显示前端控制器的名字。</p>
<p>当我们把它开启的时候，再使用url_for(&#8217;member/create&#8217;)的时候，就会生成  member/create, 这样就会得到没有前端控制器名字的URL。</p>
<p>其实，最理想的状态是，我在使用某一个链接辅助函数的时候，直接就可以获得某一个平台的URL，比如在admin的平台返回给我一个  http://www.foolbirds.com/pc_dev.php/article/show  这样的链接。 可是找了一下下午也没有找到一个，或许需要自己写一个构造这样的URL来满足项目的需求了。</p>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/url-in-other-apps2.html" title="怎么在app中构造其它app的链接(二)">怎么在app中构造其它app的链接(二)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/url-in-other-apps-one.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>如何使用swift发送邮件</title>
		<link>http://www.foolbirds.com/how-to-use-swift-to-send-mail-in-symfon.html</link>
		<comments>http://www.foolbirds.com/how-to-use-swift-to-send-mail-in-symfon.html#comments</comments>
		<pubDate>Mon, 11 May 2009 08:24:21 +0000</pubDate>
		<dc:creator>kthiz2006</dc:creator>
				<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=771</guid>
		<description><![CDATA[首先在项目的lib下建立vendor的文件夹
然后
svn checkout http://swiftmailer.svn.sourceforge.net/svnroot/swiftmailer/tags/php5/3.3.3/lib/ swift
接着把svn剪出的文件夹里的文件放到vendor目录下.
这样就可以使用swift发送邮件了
下面是一个简单的例子

&#60;?php
try
{
// Create the mailer and message objects
$mailer = new Swift(new Swift_Connection_NativeMail());
$message = new Swift_Message('Mail\'s subject', $mailBody, 'text/html');
// Send
$mailer-&#62;send($message, $mailTo, $mailFrom);
$mailer-&#62;disconnect();
}
catch (Exception $e)
{
$mailer-&#62;disconnect();
// handle errors here
}
?&#62;

Random Posts

FCK编辑器操作参数
symfony1.2中的文件上传和验证
关于cache
Add table prefix  in symfony－在symfony中使用表前缀
后台generator的文本框的长度的设置 
Awesome3.0默认快捷键
如何设置title、keywords
注释例子
兼容IE6,IE7,IE8和Firefox的图片上传预览效果
内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）

]]></description>
			<content:encoded><![CDATA[<p>首先在项目的lib下建立vendor的文件夹<br />
然后<br />
svn checkout http://swiftmailer.svn.sourceforge.net/svnroot/swiftmailer/tags/php5/3.3.3/lib/ swift<br />
接着把svn剪出的文件夹里的文件放到vendor目录下.<br />
这样就可以使用swift发送邮件了<br />
下面是一个简单的例子<br />
<code><br />
&lt;?php<br />
try<br />
{<br />
// Create the mailer and message objects<br />
$mailer = new Swift(new Swift_Connection_NativeMail());<br />
$message = new Swift_Message('Mail\'s subject', $mailBody, 'text/html');<br />
// Send<br />
$mailer-&gt;send($message, $mailTo, $mailFrom);<br />
$mailer-&gt;disconnect();<br />
}<br />
catch (Exception $e)<br />
{<br />
$mailer-&gt;disconnect();<br />
// handle errors here<br />
}<br />
?&gt;<br />
</code></p>
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://www.foolbirds.com/comment-example.html" title="注释例子">注释例子</a></li>
<li><a href="http://www.foolbirds.com/let-symfony-work-in-ubuntu.html" title="在Ubuntu下面，让symfony工作起来">在Ubuntu下面，让symfony工作起来</a></li>
<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/add-select-action-in-list.html" title="如何在List表单下面添加select系列动作">如何在List表单下面添加select系列动作</a></li>
<li><a href="http://www.foolbirds.com/get-var-in-templates.html" title="如何在视图里接收变量">如何在视图里接收变量</a></li>
<li><a href="http://www.foolbirds.com/linux-show-service-version.html" title="查看各种服务的版本">查看各种服务的版本</a></li>
<li><a href="http://www.foolbirds.com/use-colorpicke.html" title="插件使用一例:在form中加入拾色器">插件使用一例:在form中加入拾色器</a></li>
<li><a href="http://www.foolbirds.com/%e5%88%a4%e6%96%ad%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%88%ac%e8%99%ab.html" title="判断搜索引擎爬虫">判断搜索引擎爬虫</a></li>
<li><a href="http://www.foolbirds.com/python3-is-typ.html" title="python3 判断 变量类型">python3 判断 变量类型</a></li>
<li><a href="http://www.foolbirds.com/symfony-cmd.html" title="symfony命令行详解">symfony命令行详解</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/how-to-use-swift-to-send-mail-in-symfon.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
