Archive

Archive for November, 2008

自己写的Zend Framework密码校验类

November 26th, 2008 Woody No comments

Zend Framework提供了一些常用的校验类(Validators),不过都是针对单个的输入域的。但常见的注册表单上往往有两个密码输入框,只有两次输入相同的密码才算验证通过,这需要比较两个输入域的内容是不是相同,不过Zend Framework里并没有提供这样一个现成的校验类。但提供了一种机制可以让我们自己去实现这种功能。 Read more…

Categories: PHP Tags: ,

取消Zend Framework自动渲染视图

November 21st, 2008 Woody 2 comments

上一篇Hello World的例子中,Zend Framework在调用完一个Action后,会自动去寻找并且显示相应的视图文件。因此在第一个Hello World的例子中,为了直接在控制器的Action中输出“Hello World”,在echo语句后用了一个die(),显得很不美观:

<?php
class IndexController extends Zend_Controller_Action{
	public function indexAction(){
		echo 'Hello World!';
		die();
	}
}
?>

显然,有些时候并不需要Zend Framework这样“自作主张”,因此需要取消它自动加载视图的功能。

Zend_Controller_Front类有一个setParam方法可以用来设置前端控制器的一些参数。要取消Zend Framework的自动加载视图的功能,可以在整个应用程序的入口文件处设置“noViewRenderer”参数的值为“true”:

$frontController=Zend_Controller_Front::getInstance();
// ....
$frontController->setParam('noViewRenderer',true);

这样,所有的Action方法在执行完后都不会自己去加载视图。

如果只是要在某一个控制器内取消这个特性,可以在控制器的init方法或者preDispatch方法内调用

$this->_helper->viewRenderer->setNoRender();

例如:

public function preDispatch(){
	$this->_helper->viewRenderer->setNoRender();
}

再进一步,如果只是想在某个Action方法中取消自动加载视图,把上面的setNoRender()放在相应的函数里面就行了。

Categories: PHP Tags: ,

Zend Framework 1.6之Hello World

November 20th, 2008 Woody No comments

以前写过一篇Zend Framework之Hello World,不过那个例子是针对Zend Framework 0.2的,在目前的1.6版下不能用。今天用了好几个小时的功夫终于算是把一个最简单的Zend Framework程序运行出来了,真不容易,比CodeIgniter麻烦一些。 Read more…

Categories: PHP Tags: ,

Spam笑话

November 16th, 2008 Woody No comments

刚才看了一下Akismet插件拦截的spam留言,有一条让我笑了半天。

据我推测,应该是一个自以为很聪明的Spam发送程序的“杰作”。

Categories: Blog Tags: ,

一道破题

November 15th, 2008 Woody 1 comment

这是一家公司招收新职员时的一个测试问题……
你开着一辆车。
在一个暴风雨的晚上。
你经过一个车站。
有三个人正在等公共汽车。
一个是快要死的老人,好可怜的。
一个是医生,他曾救过你的命,是大恩人,你做梦都想报答他。
还有一个女人/男人,她/他是那种你做梦都想娶/嫁的人,也许错过就没有了。
但你的车只能坐一个人,你会如何选择呢?
请解释一下你的理由。

这种问题吃完饭后拿来开个玩笑还可以,我强烈讨厌拿这种问题去用于招聘时的面试。当然故事还没完,据说在200多个人中只有一个人通过了它的考验,那个人是这样回答的:

“给医生车钥匙,让他带着老人去医院,而我则留下来陪我的梦中情人一起等公车!”

很创新,很有想象力,很浪漫,一般人想不到。但我不得不说句风凉话——太不现实了。我提几个问题:

  1. 医生一定会开车吗?
  2. 就算医生会开车,如果发生交通事故怎么办?
  3. 医生开车带着老人去医院的路上,你怎么确定医生会真的去医院?
  4. 你的“梦中情人”真的愿意和你在一起吗?
  5. 你怎么知道你想去的地方和“梦中情人”要去的地方可以乘坐同一路公交车到达?

想想那些教你“面试技巧”的东西,其实大部分都是在教你怎么去欺骗面试官。看多了也就会变得麻木,进而欺骗所有的人而自己全然不知。所以面试官才会不好做,因为有太多擅长做假的人了。对于你个人来说,最终会丢掉真实的自己;对于整个社会来说,最终社会的信用体系会被摧毁……

Categories: Misc Tags:

FeedBurner FeedSmith无重定向插件

November 11th, 2008 Woody No comments

FeedBurner FeedSmith用来把原来的feed地址定向到FeedBurner上的feed。不过原始的FeedSmith会引发浏览器的重定向动作,由于众所周知的原因,一些地方的上网用户无法连接到FeedBurner上的feed地址,例如http://feedproxy.google.com/….。我修改FeedSmith的目的就是为了既能使用FeedBurner提供一部分服务,比如用AdSense添加feed里面的广告,同时不损失原来的订阅者,而且不用访问者掌握某些特殊的网络技术。

大体原理就是利用PHP的cURL来实现用服务器直接从FeedBurner上抓取RSS的内容,然后由你的服务器转发给访问者。这样,只要你的服务器所在的地理位置能访问FeedBurner上的feed,这个插件就可以正常工作。

默认情况下,FeedBurner生成的Feed里,每一项的标题的链接指向的是一个FeedBurner上的地址,点击它的时候先连接到FeedBurner然后浏览器再重定向到原始的地址。这主要是为了统计feed内的点击情况,不过如果FeedBurner无法访问的话,这也就没用了。所以需要让FeedBurner的feed里的链接直接指向原始的文章链接。这个需要登录FeedBurner账号去设置,见下图:

最后再提醒一下,如果你的服务器在国内,就不必用这个插件了。

下载FeedBurner FeedSmith无重定向插件:

Categories: Blog Tags: ,

违规的AdSense投放

November 9th, 2008 Woody 2 comments

请看这个网页,这是灵格斯词典的下载页面,上面放了AdSense广告。我一直认为这种放法混淆了下载软件与广告链接,在AdSense里应该是不被允许的。可奇怪的是,我在半年前在AdSense支持论坛里提出了这个问题后,直到现在仍然没有改变。 Read more…

Categories: Internet Tags: , ,

对WP-Syntax插件的一个小修改

November 1st, 2008 Woody 1 comment

过些日子打算在这里贴一些Python代码。Python代码有个特点,就是用缩进来表示代码的结构,不像C++一样用大括号,因此缩进在Python程序中极其重要。然后我写代码的习惯是用Tab来缩进,以前贴在这里的代码绝大部分都是使用Tab缩进的。不过这有什么问题呢?问题是我使用WP-Syntax对代码进行一些格式化,而WP-Syntax的输出是用pre标签包裹起来的。在pre标签里,Tab的显示宽度取决于用户的浏览器,通常是8个字符宽度。这实在是太多了,如果能设置Tab的宽度为4个字符就好了。 Read more…

Categories: Blog Tags:

基于App Engine的Blog构想

November 1st, 2008 Woody 1 comment

Google的App Engine(GAE)提供了一个非常好的支持Python的Web环境。近期我打算在上面做一个类似于WordPress的Blog,为此,需要考虑很多地方。 Read more…

Categories: Python Tags: ,