Zend Framework2 会员管理项目之五: 添加用户注册功能
2014年03月16日
我们分以下步骤完成用户注册功能
1. 添加user模块,与zf2官方文档一样,添加User.php, UserTable.php
2. 添加user表单以及表单验证,RegisterForm.php与RegisterFilter.php
3. 在Module.php getServiceConfig函数注册上述表单
4. 在UserController.php中添加register函数实现注册
5. 添加register.phtml视图文件,完成注册界面
在module/Member/src/Member/Model中添加User.php与UserTable.php
User.php, 简单的类文件,
exchangeArray()主要是将用户注册的数据(数组)转化为User的成员。
setPassword()将密码加密,这里采用sha1方式,也可以用md5等加密方式。
<?php /** * This source file is part of Qiai. * * PHP Version >=5.3 * * @category Qiai_Application * @package Member * @subpackage Model * @author Sai (QIAI) <sai@qiais.com> * @license Qiai-License http://www.qiai.com/licenses/qiai.ck.html * @link http://www.qiais.com */ namespace Member\Model; /** * User model * * @category Gc_Application * @package Member * @subpackage Model */ class User { public $id; public $department_id; public $name; public $email; public $password; public $role; public $tel; public $fax; public $mobile; public $zipcode; public $address; public $created; /** * set password * * @param string $plain_password plain key * * @return void */ public function setPassword($plain_password) { $this->password = sha1($plain_password); } /** * change form data to members of Member * * @param array $data form data * * @return void */ function exchangeArray($data) { $this->id = (isset($data['id'])) ? $data['id'] : null; $this->department_id = (isset($data['department_id'])) ? $data['department_id'] : null; $this->name = (isset($data['name'])) ? $data['name'] : null; $this->email = (isset($data['email'])) ? $data['email'] : null; $this->role = (isset($data['role'])) ? $data['role'] : null; $this->tel = (isset($data['tel'])) ? $data['tel'] : null; $this->mobile = (isset($data['mobile'])) ? $data['mobile'] : null; $this->fax = (isset($data['fax'])) ? $data['fax'] : null; $this->zipcode = (isset($data['zipcode'])) ? $data['zipcode'] : null; $this->address = (isset($data['address'])) ? $data['address'] : null; $this->created = (isset($data['created'])) ? $data['created'] : null; if (isset($data["password"])) { $this->setPassword($data["password"]); } } /** * get object data * * @return array */ public function getArrayCopy() { return get_object_vars($this); } }
UserTable.php
saveUser()函数将用户数据保存到数据库,判断是否有id,没有的话为新注册,有的话为更新。
<?php /** * This source file is part of Qiai. * * PHP Version >=5.3 * * @category Qiai_Application * @package Member * @subpackage Model * @author Sai (QIAI) <sai@qiais.com> * @license Qiai-License http://www.qiai.com/licenses/qiai.ck.html * @link http://www.qiais.com */ namespace Member\Model; use Zend\Db\Adapter\Adapter; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; use Zend\Db\Sql\Select; use Zend\Paginator\Adapter\DbSelect; use Zend\Paginator\Paginator; /** * Member: TableGateway * * @category Gc_Application * @package Member * @subpackage Model */ class UserTable { /** * TableGateway */ protected $tableGateway; /** * __construct * * @param TableGateway $tableGateway TableGateway * * @return void */ public function __construct(TableGateway $tableGateway) { $this->tableGateway = $tableGateway; } /** * fetchAll: get all data from table member. * * @return ResultSet */ public function fetchAll($paginated=false) { if ($paginated) { // create a new Select object for the table album $select = new Select('users'); // create a new result set based on the Album entity $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new User()); // create a new pagination adapter object $paginatorAdapter = new DbSelect( // our configured select object $select, // the adapter to run it against $this->tableGateway->getAdapter(), // the result set to hydrate $resultSetPrototype ); $paginator = new Paginator($paginatorAdapter); return $paginator; } $resultSet = $this->tableGateway->select(); return $resultSet; } /** * saveMember: save data for user. * * @param Member $user user object * * @return ResultSet */ public function saveUser(User $user) { $nowtime = date("Y-m-d H:i:s"); $data = array( 'email' => $user->email, 'name' => $user->name, 'role' => $user->role, 'password' => $user->password, 'tel' => $user->tel, 'mobile' => $user->mobile, 'fax' => $user->fax, 'zipcode' => $user->zipcode, 'address' => $user->address, 'modified' => $nowtime ); $id = (int)$user->id; if ($id == 0) { $data['created'] = $nowtime; $this->tableGateway->insert($data); } else { if ($this->getUser($id)) { if(empty($data['password'])) unset($data['password']); $this->tableGateway->update($data, array('id' => $id)); } else { throw new \Exception('User ID does not exist'); } } } /** * Get User account by user id * * @param string $id string * * @throws \Exception * @return Row */ public function getUser($id) { $id = (int) $id; $rowset = $this->tableGateway->select(array('id' => $id)); $row = $rowset->current(); if (!$row) { throw new \Exception("Could not find row $id"); } return $row; } /** * deleteMember: delete user. * * @param int $id user id * * @return void */ public function deleteUser($id) { $this->tableGateway->delete(array('id' => $id)); } /** * getUserByEmail: get user by email. * * @param string $email email address * * @return Object */ public function getUserByEmail($email) { $rowset = $this->tableGateway->select(array('email' => $email)); $row = $rowset->current(); if (!$row) { throw new \Exception("Could not find row $email"); } return $row; } }
待续…..