用户注册登陆
首先,我们应用xampp的phpMyAdmin, 先建立一个名为baidu的数据库, 注意:MySQL charset为UTF-8 Unicode,Collation为utf8_unicode_ci. 这样做的目的是确保中文的显示正常.
运行 SQL query/queries:
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(255) NOT NULL,
`password` varchar(32) NOT NULL,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO 'users'('id','username','password',`first_name`,`last_name`)
VALUES(NULL,'eric','123','eirc','zou');
这样我们就有一个名为users的数据库表单,主键为id。主键的目的是为了与别的相关数据库表单进行关联。
这里的密码没有进行md5等方法处理,加密,稍后在做处理。这里的表单名users的"s"是为了符合cake的命名空间。
然后我们就可以书写我们的cake代码,用来实现我们的登陆功能。这里,可以采用先前介绍的bake.php来快速建立,也可以手写输入。
对于,m-v-c模型来说,我们先要建立model,打开我们的Zend或者其他编辑器,找到app文件夹下面的model,建立一个users.php
<?php
class User extends AppModel
{
var $name = 'User';
}
?>
然后在controller文件夹中建立users_controller.php,这里的users就是符合了数据库的命名空间。
<?php
class UsersController extends AppController
{
function login()
{
$this->set('error', false);
if (!empty($this->data))
{
//这里我们就从用户输入的信息与数据库中的users表单进行对比
$someone = $this->User->findByUsername($this->data['User']['username']);
//变量$someone被附值为用户数据,然后对比用户输入的与数据库中的值是否一致
if(!empty($someone['User']['password']) && $someone['User']['password'] == $this->data['User']['password'])
{
$this->Session->write('User', $someone['User']);
//然后我们将用户信息包存在session中,然后跳转到/index
$this->redirect('/clients');
}
// Else, they supplied incorrect data:
else
{
$this->set('error', true);
}
}
}
function logout()
{
//如果用户单击登出,那么触发这个行为,我们需要这里清楚session信息
$this->Session->delete('User');
//我们可以用下面的redirect指向到用户登出后的页面
$this->redirect('/');
}
}
?>
这样我们的核心的控制器就写好了,他将比较从view文件输入的信息与model文件取得信息,完成整个流程。
下面我们书写最后的view文件来完成这个功能的实现
然后在views文件夹下创建users文件夹,然后在建立login.thtml
thtml 是cake里面的一个模版的文件的后缀,用来简便开发
<?if ($error): ?>
<p>The login credentials you supplied could not be recognized. Please try again.</p>
<? endif; ?>
<form action="<?php echo $html->url('/users/login'); ?>" method="post">
<div>
<label for="username">Username:</label>
<?php echo $html->input('User/username', array('size' => 20)); ?>
</div>
<div>
<label for="password">Password:</label>
<?php echo $html->password('User/password', array('size' => 20)); ?>
</div>
<div>
<?php echo $html->submit('Login'); ?>
</div>
</form>