symfony 的设计和代码看着都很不错

貌似很早就知道这个框架 symfony,但一直没接触过。也许是看到过,不知道什么原因没有仔细看,可能是这个古怪的名字吧。

symfony 应该和 django 一样属于实践型的开发框架,完全以开发真实项目为目的而设计创建的框架。虽然国内的一些小型框架也是这样,但设计理念和视角相差太多。

和 PEAR 集成,命令行创建项目和部署,项目、应用、模块、页面一层一层的设计体系,向导自动生成漂亮的 XHTML 页面,完善的 MVC 设计,表单,Ajax,缓存,国际化,自动化后台,日志调试,部署,相关工具,还有专门的 book 教程。一切看上去都很不错。

当然,上手估计也不是很容易,毕竟体系构架相当复杂,为大项目准备的。

ThinkPHP和FleaPHP都没Layout支持

真是无法想象,相对而言 ThinkPHP 比 FleaPHP 稍好一些,有一点 Layout 概念(但是开发者对 Layout 的理解貌似有问题)。不过 TP 上手极快,简单实用,从 RoR 上学来的默认约定和自动生成目录很方便。如果就按照它的模式开发一个简单的应用应该没什么问题。但是感觉有点过分使用 js 功能(这也是国内开发者的通病),RBAC 的实现也不是很完善。先凑合着用吧,动手为先!

Log、Session 与跳转

熟悉 Drupal 的构架后,回头看看国内的开发框架以及相关程序发现最欠缺的内容就是程序本身的 Log 系统(不是开发调试用的 Log)、基于 Session 的用户交互界面。

现在的程序无论 Log 和 Session 都是基于文件的,对于拥有多台 Apache 后端的系统构架来说肯定不行。这个似乎与国内的 PHP 环境大多提供的 MySQL 数据库空间过少的现实有关。

对于 Log 来说,本身大部分国内开发者更喜欢一行一行的去 Debug 程序,即使在开发上都不愿意使用。那么增加额外的系统操作 Log 更是难上加难。不过,良好的系统操作 Log 对于程序的安全性和开发测试也是非常有益的。类似于程序开发 Log,对于整个系统也建立一套 Log,能够方便程序管理员发现程序的安全隐患和性能负载找出瓶颈,也能统计出一些有益的数据,方便网站应用的发展。

至于基于 Session 的跳转用户界面。大多数国内程序都还是喜欢使用中间页,也就是当一个操作成功后,出现一个设置几秒内跳转到其他页面的中间页面,该页面显示刚才操作成功的提示信息。这样子其实白白让 Web 服务器多了一个请求,而且对用户极度不友好(浏览器到后退按钮因为这个中间页失效)。所以,省去中间页,将提示信息(不仅仅是成功信息,也包括错误信息)统一储存到 Session 中,只用在跳转后的页面中显示当前 Session 信息即可(成功跳转到其他页面,错误仍然在当前页面,但一样的处理来显示 Session 中的成功或错误信息)。

试用 Windows Live Writer

确实有点像使用 Word 的感觉,应该用来写文章不错。希望自己能够改变一下一直以来的日志风格,多一点大段的文字。

总是喜欢写零星的几个字,而且特别喜欢回车换行。呵呵。

好了,我是不是应该把小依的私密日记恢复的说。

深夜日志

很久没有深夜写过日志。这两年多来,也很少写过自己的生活感情。工作也只是只言片语。
曾经的失落变成极度失落,无比的自卑,感觉一事无成。
对什么都失去信心,也失去去完成的毅力。放佛一切都不重要。

当然,这段时间内经历了很多,学会了很多。
也很感谢这些我说不出名字的人。

嗯,写下这篇日志的目的在于告诉自己。
现在,必须去完成一些事情了。

其实,日子还很长,什么都会发生。
能够努力去做,相信自己就能做到。
一切都不遥远。

用 Flock 浏览器 创建

SVN 钩子:禁止提交文件和服务器自动更新

服务器端自动更新脚本,编辑仓库的 hooks/post-commit 内容如下:
#!/bin/sh
REPOS="$1"
REV="$2"
export LANG="zh_CN.UTF-8"
/usr/bin/svn update /var/www

脚本需要 +x 和设置属主(建议)才能执行:
sudo chown www-data:www-data hooks/post-commit
sudo chmod +x hooks/post-commit

/var/www 是 apache 的 htdocs 目录。另外,钩子脚本也是以 www-data 身份执行的,所以先使用:
sudo su www-data -c "svn co http://your.svn/path /var/www"
检出代码并保存认证信息。

禁止用户提交临时文件、图片缩略图文件等,编辑仓库的 hooks/pre-commit 内容如下:
#!/bin/sh
export LC_ALL=zh_CN.UTF-8
REPOS="$1"
TXN="$2"
TYPE="$3"
if test -z "$TYPE" ; then
TYPE="-t"
fi

Make sure that the log message contains some text.

SVNLOOK=/usr/bin/svnlook
look() {
$SVNLOOK "$@" "$TYPE" "$TXN" "$REPOS"
}
#if look log | grep '.' > /dev/null ; then :; else
#    echo "必须填写提交日志!" >&2
#exit 1
#fi
disexts='.(bak|exe|tmp|lib|o|obj|log|rar|zip|7z|gz|tar|tgz)$'
disfiles='(^|/)(Thumbs.db|desktop.ini)$'
disdirs='(^|/)(_notes|.DS_Store)/$'
disdot='(^|/)(.)'
diss="$disexts|$disfiles|$disdirs|$disdot"
if look changed | grep '^A ' | sed -r 's#^A +##' | grep -iE $diss 1>&2 ; then
echo "不允许提交上面所列出文件或目录。n这些文件可能是图片的缩略图、临时或备份文件和目录。n请撤销增加上述文件或目录后,再提交到版本库!">&2
exit 1
fi

All checks passed, so allow the commit.

exit 0
注释掉的那段代码是强制要求提供修改日志。
最后,感谢鸡蛋壳和mOo两位同学。

用 Flock 浏览器 创建