要记住

从最简单版本开始
持续叠代(always beta)
Eat your own dog food

-from Felix Ding

CakePHP自学笔记(四):CakePHP的命名规范

AquarTutorial 第一期
-CakePHP自学笔记

(一):利用Ubuntu搭建开发环境
(二):数据库配置与连接
(三):MVC开发模式简介
>>(四):CakePHP的命名规范

<-<-<-<-<-<-<-<-<-<-<-<-<-

Step=>1

上篇笔记中我们刚刚对MVC开发模式有了一个简单的认识,在进行开发之前,我们首先要熟悉CakePHP的一些命名规范,所谓命名规范也就是数据表、模型文件、模型、控制器文件、控制器、视图文件等的命名的一些规范,注意这是规范不是规定,即并不是必须的,但遵循默认的命名规范能大大加快开发速度,并减少不必要的麻烦。

比如你要给程序添加一系列关于物品(item)的功能,比如查看、购买等等,你最好:

  1. 用items命名数据表;
  2. 用item.php命名模型文件,放在app/models目录下,用Item命名我们的模型(见下文);
  3. 用items_controller.php命名控制器文件,放在app/controllers目录下,用Items命名我们的控制器
  4. 在app/views目录下建立items子目录

注意有几处单复数的差别。

Step=>2

终于到动手写写代码的时候了,首先打开app/models/item.php添加如下代码:

<?php
class Item extends AppModel{
	var $name = 'Item';
}
?>

然后继续修改app/controllers/items_controller.php。

<?php
class ItemsController extends AppController {
    var $name = 'Items';
?>

这样就完成了最基本的模型和控制器,我们所写的模型都继承AppModel类,而AppModel类又继承Model类,同样,程序中的控制器都继承AppController类,后者又继承Controller类,此处Model类和Controller类都由CakePHP的内核提供。我们可以更改AppController类,比如增加Auth组件,这样程序的所有控制器都会默认加载这个组件。

注意我们并没有为模型指明具体的数据表,也没有为控制器指明要使用的模型,这就是CakePHP命名规范的作用:默认情况下,单数命名的模型会自动调用复数命名的数据表(比如Item这个模型就会默认与items这个数据表交互),复数命名的控制器会自动调用单数命名的模型(所以ItemsController会默认调用Item这个模型),最后视图会自动接受控制器的相应函数返回的数据,马上就来实现一个视图。

Step=>3

一个控制器可能有很多函数,而每个函数都有相对应的视图,所以我们要在控制器对应的视图目录下以函数名添加视图。这里插一句CakePHP构造链接的方法,比如这个items控制器有个buy函数来实现购买功能,这时如果CakePHP的程序所在的目录是http://www.example.com/cake,那么这个buy函数对应的视图渲染的页面就是http://www.example.com/cake/items/buy,而如果我们访问http://www.example.com/cake/items,即直接访问这个控制器,Cake会默认返回index函数及其视图。

下面我们为Items这个控制器添加index函数,简单地返回所有items数据表中的条目。修改app/controllers/items_controller.php。

<?php
class ItemsController extends AppController {
    var $name = 'Items';
    function index() {
        $this->set('items',$this->Item->find('all'));
    }
?>

这里set函数就是用来从控制器向视图传递数据的,它会以数组的形式传递数据。具体可以看这个页面

然后我们创建app/views/items/index.ctp文件并添加如下内容:

<h1>Show Items</h1>
 
<table>
	<tr>
		<th>Id</th>
		<th>Name</th>
	</tr>
 
	<?php foreach ($items as $item): ?>
	<tr>
		<td><?php echo $item['Item']['id']; ?></td>
		<td><?php echo $item['Item']['name']; ?></td>
	</tr>
	<?php endforeach; ?>
 
</table>

在数据表中添加一些数据(此处我们假定只展示数据表中id和name两项),然后访问http://localhost/caketest/items就能看到一个展示items数据的表格。

P.S.对于多词组的名字,命名规范如下:

  • 数据表名:user_profiles;
  • 模型名:UserProfile,模型文件名:user_profile.php;
  • 控制器名:UserProfilesController,控制器文件名:user_profiles_controller.php
  • 视图文件目录:user_profiles

CakePHP自学笔记(三):MVC开发模式简介

AquarTutorial 第一期
-CakePHP自学笔记

(一):利用Ubuntu搭建开发环境
(二):数据库配置与连接
>>(三):MVC开发模式简介

<-<-<-<-<-<-<-<-<-<-<-<-<-

Step=>1

CakePHP遵循MVC开发模式,所谓MVC也就是Model-View-Controller的首字母缩写,MVC开发模式把应用程序开发分成三个部分,Model即模型用于管理数据,View即视图用来制作用户界面,而Controller即控制器管理应用程序的逻辑。下图演示采用MVC开发的程序如何响应用户的请求:

MVC请求演示

MVC请求演示


用户点击某个链接后,分发器会调用相应的控制器及函数,控制器会向模型请求数据,并做一些动作比如验证是否登录或者向模型写入数据,然后把需要展示的内容返回给视图,最后视图渲染网页返回给用户。

MVC的优点在于添加或移除系统组件很方便,可以说是一种迭代式开发,这样做成的系统扩展性很强,组件的重用性也很好。引述CakePHP手册:

为什么要用 MVC模式 呢? 因为它是一个经过考验的真正的软件设计模型,它可以使程序成为可维护的、模块化的和快速开发的包。使用分离的模型(Model)、视图(View)和控制器(Controller)组织的程序是轻便的。新的特性很容易就被加入,旧的程序换上新的外观也是一下子的功夫。模块化和分离的设计使得开发者和设计者能够同时工作,这包括了快速 原型的能力。分离的设计令开发者可以修改应用的一部分而不会影响到其他部分。

如果你从来没有用过这种方法建立应用,适应它需要一些努力,但是我们相信一旦你使用CakePHP建立了你的第一个应用,你不会再想用其他方法建立你的应用了。

Step=>2

一般来说,要给CakePHP程序添加新的功能需要如下几步:

  1. 在数据库中新建一个数据表;
  2. 在app/models目录下新建一个Model文件;
  3. 在app/controllers目录下新建一个Controller文件;
  4. 在app/views目录下新建一个目录,在该目录中针对Controller中的每个函数新建一个View文件。

这样就已经把全新的功能添加到了CakePHP中,当然,你可能还需要修改其他的MVC以便整合。

接下来说说CakePHP的一些命名规范,之后再用MVC给这个网站添加一个功能。

CakePHP自学笔记(二):数据库配置与连接

AquarTutorial 第一期
-CakePHP自学笔记

(一):利用Ubuntu搭建开发环境
>>(二):数据库配置与连接

<-<-<-<-<-<-<-<-<-<-<-<-<-

Step=>1

我们用phpMyAdmin管理数据库,用浏览器打开 http://localhost/phpmyadmin 用户名输入root,密码就是安装phpMyAdmin时设置的密码。

登录后,新建一个数据库,比如cakedb,同时注意选择字符集。建立数据库后,默认会赋予root用户全部权限。

打开cakedb数据库,你可以很方便地添加数据表,字段等等。

Step=>2

然后我们要让Cake和刚刚建立的数据库连接起来,这项工作只需要我们更改app/config里面的一个配置文件,进入/var/www/caketest目录,你可以把这个目录添加到自己的书签里方便以后访问,用gedit打开app/config/里面的database.php文件,我们只要修改从81行(要查看行号,可以在编辑->首选项里面打开“显示行号”)开始的几行配置:

81
82
83
84
85
86
87
88
89
90
	var $default = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'root',
		'password' => 'somepassword',
		'database' => 'cakedb',
                'encoding' => 'utf8',
		'prefix' => '',
	);

其中,login和password分别添有数据库全部权限的用户的用户名和密码,database添数据库的名称,encoding是需要手动写上去的,强制用utf8编码。改好后保存,刷新 http://localhost/caketest 页面,应该是下面这样:

Database Connected

Database Connected


就表明Cake已经成功地连接了数据库。

P.S.注意这个页面中有提示
Notice (1024): Please change the value of ‘Security.salt’ in app/config/core.php to a salt value specific to your application [CORE/cake/libs/debugger.php, line 549]
这是要你去改app/config/core.php中的’Security.salt’值(在第151行),这个值是Cake用来算Hash时(比如验证密码等)需要用到的,为了安全一定要设置一个不容易猜到的字符串。

CakePHP自学笔记(一):利用Ubuntu搭建开发环境

AquarTutorial 第一期
-CakePHP自学笔记

>>(一):利用Ubuntu搭建开发环境

<-<-<-<-<-<-<-<-<-<-<-<-<-

Step=>1

首先,到Ubuntu官方网站下载最新版的Ubuntu Desktop LiveCD,如果速度慢也可以到网易或者搜狐的开源镜像站点去下载。然后把镜像刻录到一张空的CD盘上面。

[Choice 1]你可以直接在Windows里面安装一个Ubuntu系统,优点:安装卸载方便,缺点:速度稍慢。推荐没用过Linux的同学用这种方法装。
[Choice 2]重启电脑,从光驱引导,安装Ubuntu系统,优点:完全释放系统资源,缺点:不适合新手。

安装完系统后,可以调整一些设置,详细的教程以后再写。

Step=>2

现在开始安装LAMP服务器,所谓LAMP Server也就是Linux操作系统+Apache服务器+MySQL数据库+PHP(以前也指Perl,现在貌似都是PHP了),在Ubuntu中安装LAMP简单至极,这也是选择Ubuntu进行开发的一个原因。

首先,你需要打开一个终端,即应用程序->附件->终端(英文系统里是Application->Accessories->Terminal),也就是所谓的壳(Shell)。然后输入下面的命令:

sudo -i

然后输入你登录时的密码,按回车应该出现root@的字样就说明你已经获得了根用户(root)的权限,在这种模式下你可以安装软件、更新系统、调整系统级的配置等等,下面我们开始安装LAMP服务器,执行:

tasksel

会出现一个蓝色的页面,用上下箭头改变高亮条的位置,调整到LAMP Server的选项上面按空格,然后按Tab键切换到OK按钮上按回车,这样Ubuntu系统就会自动安装包括Apache,MySQL和PHP等一系列程序,安装时MySQL会让你设置管理员(也叫root)密码,还有一次是确认密码,这个密码要记牢,管理数据库时要用到。

此时我们的服务器已经安装完成。你可以用任意浏览器访问 http://localhost 这个网址如果出现一个It works!样子的网站就说明一切OK了。附图演示:

Apache Works

Apache Works

接下来,我们安装phpMyAdmin这个MySQL数据库管理软件,有了它你就可以很方便地管理数据库,继续在终端里执行:

apt-get install phpmyadmin

安装时会有配置选项,用空格选择apache2然后按Tab点OK,装完后会询问是否允许建立数据库,选Yes并输入数据库管理员的密码,随后会设置phpMyAdmin的密码,这个也要记住。

最后,我们需要修改Apache的一些配置以便让Cake能正常运行,继续执行(每次一行,第二条命令中可以使用Tab键自动补齐功能):

a2enmod rewrite
gedit /etc/apache2/sites-enabled/000-default

会打开一个文字编辑器,把里面的AllowOverride 后面的None改成All。保存并关闭gedit。

重启Apache服务器,加载新配置:

/etc/init.d/apache2 restart

P.S.不要退出终端

Step=>3

下面开始部署CakePHP的开发环境,首先到Cake的官方网站下载其代码,这份笔记基于1.2.6版本,写这份笔记的时候下载地址是这个

下载后解压到桌面,重命名一下,下面以caketest为例继续,回到我们的终端,执行:

cp -R /home/你的用户名/Desktop/caketest /var/www
chmod 777 -R /var/www

这样我们已经完成了CakePHP开发模式的部署,注意不要改动caketest目录下cake里面的文件,那里是CakePHP的核心文件。我们的第一个Cake程序将在app子目录下面开始。

用浏览器打开 http://localhost/caketest 或者你起的随便什么名字(比如diablo)。应该看到下面这样的网页。

CakePHP Develop Environment Done

CakePHP Develop Environment Done

现在你可以用两次exit命令退出终端了。

Ghost是神器啊

如题。。。。。

庆功帖

热烈恭喜王鹏君保送厦门大学,这届微机班强势地以六个一等奖五个保送的成绩完成高中阶段全部使命!
白钰君哈工大最早出来结果,恭喜!
某洵和某陈随后保送浙江大学,嗯嗯。
然后老白强势保送上海交大,大牛!
最后王鹏君搞定了厦门大学,结果堪称圆满!

庆功,庆功!!!

CakePHP的文档该更新了

http://book.cakephp.org/view/333/A-Note-on-mod_rewrite

像这里一条Comment就抵过整页教程了。。。

1 – on ubuntu gutsy/hardy

i used this command to enable mod_rewrite

$sudo a2enmod rewrite

then i modified this file

vi /etc/apache2/sites-enabled/000-default

and modified to be AllowOverride All on /var/www dir

其实我真的很想去

Route Research

Route Research

为何

几欲提笔,却不知该写什么。

用Python操作Excel文件——引言

初六就又开学了,我去把课本什么的取回来,顺便跟马丽娜和伟哥聊了几句,伟哥让我把五次调研考试的成绩单改成每个人的个人成绩分析,昨晚和今天上午就去研究怎么用Python操作Excel了(其实上次和海龙研究了怎么用Java操作,不过看完Python的代码之后就发誓坚决不用Java了。。。)

直接Google返回这个网站,很好很强大,也可以直接下载我把3个Package和那个Tutorial打包在一起的文件

各种解压之后安装,再来几个import就可以很爽地用Python操作.xls文件了。

我还没拿到具体的成绩单,不过我暂时做了个测试用的小程序,把代码贴过来围观一下Python的强大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# coding=utf-8
 
from xlrd import *
from xlwt import *
from tempfile import *
import glob
 
names = []
outfiles = []
now_row = 1
 
def find_ouf(now_name):
    if names.count(now_name) == 0:
        names.append(now_name)
        temp_ouf = Workbook()
        outfiles.append(temp_ouf)
        outfiles[len(outfiles)-1].add_sheet('Analysis')
        temp_ous = outfiles[len(outfiles)-1].get_sheet(0)
        temp_ous.write(0,0,now_name)
        temp_ous.write(1,1,u'数学')
        temp_ous.write(1,2,u'语文')
        temp_ous.write(1,3,u'英语')
        temp_ous.write(1,4,u'物理/理综')
        temp_ous.write(1,5,u'化学')
        temp_ous.write(1,6,u'生物')
    return outfiles[names.index(now_name)]
 
infiles = glob.glob('*.xls')
 
for num_inf in range(len(infiles)):
    now_inf = open_workbook(infiles[num_inf])
    now_ins = now_inf.sheet_by_index(0)
    now_row += 1
    for row in range(2,now_ins.nrows):
        now_name = unicode(now_ins.cell(row,1).value)
        now_ouf = find_ouf(now_name)
        now_ous = now_ouf.get_sheet(0)
        now_ous.write(now_row,0,now_ins.cell(0,0).value)
 
for each in range(len(outfiles)):
    outfiles[each].save(names[each]+'.xls')
    outfiles[each].save(TemporaryFile())

星辰是多么美妙的一个词

命运是一场神秘的游戏,让你的朋友难以自拔。这是一个不可确定,又无法挽回的游戏,从出生以来,我们的每一次呼吸都是冒险,不知命运是否会让我们如愿,安抚我们的忧虑,抚慰我们的幻影和梦。它是如此迷惑和神奇,能让我们忘记忧惧。日复一日,我们如钟表般一格格前进,选择或丢弃幸运或不幸运的数字,但是到最后,我们为了避免掉进命运的陷阱所付出的努力,都像我们面对死亡时的眼泪一样无力。

虚无
宇宙
星辰
太阳
生命
玫瑰
聪慧
衔尾蛇
这是关于人类智慧的故事!这也是石头、点金石、秘密的钥匙和发现并隐藏它的学者组织的故事!这些词归结了几百万年来的奥秘:虚无中衍生宇宙。它布满星辰,其中包括了太阳,繁衍出象征生命的玫瑰——地球上最美丽的花朵。人类得以赞赏它的美丽,多亏了自身的聪慧,而这份智慧则由创立衔尾蛇组织的学者传下来。

如果你穿过曲折的道路,轻信的人,
你将打开没有尸体的地下墓室,
其中沉睡着历史。
前往讯息的城市,
要求和不存在的人见面,
这样你能听见黑暗的声音。
跟随符号的路程,
寻找密封的房间,
在那里,时间关乎生死。
你只能在进入长生不死时,
才能见到无形的道路。
它将带你到伊普萨岛,
那儿住着奇幻的生物和怪兽。
对抗恶魔,
你将在它脚下,找到最后几句话。
然后穿过通道之柱,
进入迷宫。
在那里撒下种子,
你将看到花开。

全家福

我和爷爷奶奶

我和爷爷奶奶

全家福

全家福