Zend Framework 教程:简单的注册和登录验证

摘要:
用户名=$data-&isValid($_POST)){$data=$form-&setIdentityColumn('username')-&setIdentity($data['username])-&aamp;$result=$auth-&

注:本系列教程都在zend studio 6.1.1上开发完成,amp环境全部自己配置,以避免使用类似xampp\wamp等继承环境带来的未知问题。

1、首先创建存储用户的表

image

 

2、创建对应于数据库表的数据库访问模型,即Zend Table

在zend studio的工程上右键选择New Zend Framework Item,选择Zend Table,使用Users作为PHP文件名,以下是Users.php的内容:

image

代码具体的含义不言自明。

3、创建控制器

使用同2的方法创建Zend Framework Item,不过选择的是Zend Controller,使用AuthController.php作为PHP文件名。内容如下(控制器中使用的LoginForm 和RegistrationForm 是Zend_Form的子类,用于创建表单,细节在下一节):

<?php
         /** * AuthController *
          * @author happydagui.min
          * @version */
          require_once 'Zend/Controller/Action.php';
          require_once '../application/default/forms/LoginForm.php'; // 注意这里的路径的写法 require_once '../application/default/forms/RegistrationForm.php';
          class AuthController extends Zend_Controller_Action {
                /** * The default action - show the home page */
                public function homeAction() { // 进入首页前检查用户是否已经登录,否则转向登录页面
                      $storage = new Zend_Auth_Storage_Session ( );
                      $data = $storage->read ();
                      if (! $data) { $this-&gt;_redirect ( 'auth/login' ); }
                      $this-&gt;view-&gt;username = $data-&gt;username;
                       }
                public function loginAction() { // 处理登录
                     $users = new Users ( ); $form = new LoginForm ( ); $this-&gt;view-&gt;form = $form; if ($this-&gt;getRequest ()-&gt;isPost ()) { if ($form-&gt;isValid ( $_POST )) { $data = $form-&gt;getValues (); $auth = Zend_Auth::getInstance (); $authAdapter = new Zend_Auth_Adapter_DbTable ( $users-&gt;getAdapter (), 'tb_users' ); $authAdapter-&gt;setIdentityColumn ( 'username' ) -&gt;setCredentialColumn ( 'password' ); $authAdapter-&gt;setIdentity ( $data ['username'] ) -&gt;setCredential ( $data ['password'] ); $result = $auth-&gt;authenticate ( $authAdapter ); if ($result-&gt;isValid ()) { $storage = new Zend_Auth_Storage_Session ( ); $storage-&gt;write ( $authAdapter-&gt;getResultRowObject () ); $this-&gt;_redirect ( 'auth/home' ); } else { $this-&gt;view-&gt;errorMessage = "Invalid username or password, Please try again."; } } } } public function signupAction() { // 处理注册 $users = new Users ( ); $form = new RegistrationForm ( ); $this-&gt;view-&gt;form = $form; if ($this-&gt;getRequest ()-&gt;isPost ()) { if ($form-&gt;isValid ( $_POST )) { $data = $form-&gt;getValues (); if ($data ['password'] != $data ['confirmPassword']) { $this-&gt;view-&gt;errorMessage = "Password and confirm password donnot match."; return; } if ($users-&gt;checkUnique ( $data ['username'] )) { $this-&gt;view-&gt;errorMessage = "Name already taken."; return; } unset ( $data ['confirmPassword'] ); $users-&gt;insert ( $data ); $this-&gt;_redirect ( 'auth/login' ); } } } public function logoutAction() { // 处理注销 $storage = new Zend_Auth_Storage_Session ( ); $storage-&gt;clear (); $this-&gt;_redirect ( 'auth/login' ); } }
// 这里去掉了php的结束符号 4、显示注册和登录的表单类,需要手工创建LoginForm.php(位置:application/default/forms/)
image
RegistrationForm.php(位置:application/default/forms/)
image
 
5、创建完控制器和表单后,下一步自然是视图
home.phtml
 
image

login.phtml文件

image

signup.phtml文件

image 

如有什么问题,请提出来探讨。我这里完全可以运行。

另外,可以考虑抽象控制器的一个基类,来实现统一的验证。这个后续再将。

免责声明:文章转载自《Zend Framework 教程:简单的注册和登录验证》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇21清北学堂腾飞营游记LatinIME输入法分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【PHP】你使用过redis做异步队列么,是怎么用的?有什么缺点?

Redis设计主要是用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列。 它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列; 另外,做消息队列的其他特性例如FIFO(先入先出)也很容易实现,只需要一个list对象从头取数据,从尾部塞数据即可; Redis能做消息队列还得益于其list对象blpop brpop接口以及P...

如何使用Docker构建开发环境

我们在开发中都会遇到这样的问题:在本地开发好功能后,部署到服务器,或者其他人拉到本地接着开发时,会出现功能无法使用的情况。 这些异常情况,大多数时候是因为系统不同而导致的依赖差异。因此,为了解决这个问题,就产生基于 Docker 构建统一开发环境的需求。 有关 docker 的基本知识,可以参照 docker教程。 1. 使用 Docker 的好处 部...

nuxt基础一

nuxt项目的文件夹目录 1.nuxt-link组件和router-link组件一样 2.pages文件夹中文件名就是路由路径名(无需配置路由路径),是页面组件。   laouts文件夹,是公共的模板的内容组件,公共的组件<Nuxt />,必须要加 不过在 Nuxt.js 框架中,我们有了新的变化,layouts对应目录中的layouts文件...

简写artTemplate模板一二

最近研发的项目当中,用到了artTemplate模板,在此简写一二,一来养成做笔记的习惯,二来习惯了做笔记。 一、展示模板 <div id='mySwipe'  class='swipe'><div id="content"></div></div> 二、存放模板 <script type="text/...

WebSocket

一 Websoket简介 WebSocket 是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在WebSocket...

26.怎样在Swift中定义宏?

  Swift 中没有宏定义,苹果建议使用let 或者 get 属性来替代宏定义值。虽然没有#define,但我们仍然可以使用 #if 并配合编译的配置来完成条件编译。下面会列出Swift项目开发中的一些常用宏定义,并提供源码。 1.常用字体宏定义 import Foundation import UIKit /// 系统普通字体 var gof_Sy...