zoukankan      html  css  js  c++  java
  • Zendframework登陆注册实例教程

    简介:这是Zendframework登陆注册实例教程的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=342057' scrolling='no'>

    一.服务器配置

    说明:这个实例的开发系统环境是windows 7,所用服务器是Nginx1.0.5,Zendframework框架的版本是1.11.9,PHP5.3.6,所用数据库是MySQL 5.1.50

    首先从配置Nginx开始,在这里面需要开启URL的rewrite:

    这个是我的nginx.conf文件中配置虚拟主机部分

    文件:D:\nginx\nginx-1.0.5\conf\nginx.conf

    location ~ \.php$ {

                root           html;

                fastcgi_pass   127.0.0.1:9000;

     

                 #如果是一个文件夹,访问规则301

                 if (-d $request_filename){

                     rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

                 }

     

                 #如果没有改文件访问默认文件

                 if (!-e $request_filename) {

                        rewrite ^/(.*)$ /myproject/index.php last;

             }

     

                 #自动在访问URL后面加"/"

                 if (-d $request_filename){

                       rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

                 }

     

                fastcgi_index  index.php;

                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

                 fastcgi_param PATH_INFO $fastcgi_script_name;

               

                 include        fastcgi_params;

    二.建立项目

    然后在你的Nginx的html目录下建立如下文件

    myproject/

    /application

    /controllers

    /models

    /views

    /filters

    /helpers

    /scripts

    /library

    /public

    /images

    /scripts

    /styles

     

    Zend Framework 的控制器,Zend_Controller,被设计支持使用clean urls 的网站。为实现这个目的,所有的请求需要通过单一的index.php 文件,这就是所知的启动文件(bootstrapper)。这给我们提供了程序中所有页面的中心点并确保运行环境配置正确。我们

    用.htaccess 文件来实现这个目的,.htaccess 在myproject 的根目录中,内容如下:

    文件:myproject/.htaccess

     

    RewriteEngine on

    RewriteCond %{SCRIPT_FILENAME} !-f

    RewriteCond %{SCRIPT_FILENAME} !-d

    RewriteRule ^(.*)$ index.php/$1

    RewriteRule 非常简单并可以翻译为“对任何url, 重定向到index.php”。

    然而,对于图像,JavaScript 和CSS 文件的请求不应该重定向到启动文件,把这些文件放到public 目录下myproject/public 下:

    文件:myproject/public/.htaccess

    RewriteEngine off

    虽然我们当前的rewrite rules 不需要太严格,但我们还是在application 和library 目录下添加一些.htaccess 文件用来保护我们的程序:

    文件:myproject/application/.htaccess

    deny from all

    文件:myproject/library/.htaccess

    deny from all

    三.网站

    启动文件

    接下来我们开始正式开始这个项目,首先是启动文件,也就是放在myproject根目录下的index.php它是个跳转的文件,在里面告诉请求执行那些操作。

    文件myproject/index.php

    <?php

    error_reporting ( E_ALL | E_STRICT );

    date_default_timezone_set ( 'Europe/London' );

    set_include_path ( '.' . PATH_SEPARATOR . './library' . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . get_include_path () );

     

    include "Zend/Loader.php";

    Zend_Loader::loadClass ( 'Zend_Controller_Front' );

    Zend_Loader::loadClass ( 'Zend_Config_Ini' );

    Zend_Loader::loadClass ( 'Zend_Registry' );

    Zend_Loader::loadClass ( 'Zend_Db' );

    Zend_Loader::loadClass ( 'Zend_Db_Table' );

    Zend_Loader::loadClass ( 'Zend_Auth' );

    Zend_Loader::loadClass ( 'Zend_Auth_Adapter_DbTable' );

     

    $config = new Zend_Config_Ini ( './application/config.ini', 'general' );

    $registry = Zend_Registry::getInstance ();

    $registry->set ( 'config', $config );

     

    $db = Zend_Db::factory ( $config->db->adapter, $config->db->config->toArray () );

    Zend_Db_Table::setDefaultAdapter ( $db );

     

    $frontController = Zend_Controller_Front::getInstance ();

    $frontController->throwExceptions ( true );

    $frontController->setBaseUrl ( '/login' );

    $frontController->setControllerDirectory ( './application/controllers' );

     

     

    // run!

    $frontController->dispatch ();

     

    注意我们没有在文件的结尾放?>,因为它不是必须的并且有个好处是:我们可以防止当多余的whitespace 发生在?>后面出现难以调试的错误。

     

    创建模型(M)

    做这个例子需要建立一个用户信息的数据库,之后在mysql里建立一个数据库,里面需要有如下数据,一个数据表user

    里面含有三个字段id,username,password

    然后我们在models里面建立自己的模型:

    文件:myproject/application/models/user.php

     

    <?php

    class User extends Zend_Db_Table {

        

         protected $_id;

         protected $_username;

         protected $_password;

        

         public function checkUnique($username) {

                  //注册验证用户米是否存在

                  $select = $this->_db->select ()->from ('user')->where ( 'username = ?', $username );

                  $result = $this->getAdapter ()->fetchOne ( $select );

                 

                  if ($result) {

                           return true;

                  } else {

                           return false;

                  }

         }

    }

     

    连接数据库需要有配置文件,Zend Framework 提供了一个Zend_Config 来提供灵活的面向对象访问配置文件。此刻,配置

    文件可以是一个PHP 数组,一个INI 文件或者XML 文件。我们将使用INI 文件:

    文件:myproject/application/config.ini

    [general]

    db.adapter = PDO_MYSQL

    db.config.host = localhost

    db.config.username = root

    db.config.password = 123456

    db.config.dbname = login

    创建试图文件(V)

    使用Zend studio创建视图文件可以在Zend studio里面右键项目—newàotherà会弹出下面页面,建立视图文件。

     

    有了控制器可以开始写我们的视图文件了,基于MVC模式写的Zendframework的视图文件扩展名是.phtml

    文件:myproject\application\views\scripts\index.phtml

    <?php echo $this->render('header.phtml'); ?>

    <h1><?php echo $this->escape($this->title); ?></h1>

    <form name = "form1" action="index/login" method="post">

    用户名:<input type="text" id="username"  name="username"/> <br/>     

    密码:<input type="password" id="password"  name="password"/> <br/>

    <?php echo $this->username;?>

    <input type="submit" name="submit" value="登陆">

    </form>

    <a href="/register/index">还没有账号,点此注册</a>

    <div style="display:none;">

    <table>

    测试用户名和密码,用于查看数据库是否连接成功

    <?php foreach($this->user as $u) : ?>

    <tr>

    <td><?php echo $this->escape($u->username);?></td>

    <td><?php echo $this->escape($u->password);?></td>

    <td>

    </td>

    </tr>

    <?php endforeach; ?>

    </table>

    </div>

     

    <?php echo $this->render('footer.phtml'); ?>

     

    其中考虑到代码的公共部分可以重复使用,在视图里加了头部和脚部的文件。

    文件:myproject/application/views/scripts/header.phtml

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

    <head>

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

    Page 9 of 18

    <title><?php echo $this->escape($this->title); ?></title>

    </head>

    <body>

    <div id="content">

     

    文件:myproject/application/views/scripts/footer.phtml

    </div>

    </body>

    </html>

    设置控制器(C)

     

    在Zend studio里面右键项目—newàotherà会弹出下面页面,建立控制器。

     

     

     

    假如我们把这个网站的首页设为登录界面,则在设置的默认控制器为

    文件:myproject/application/controllers/IndexController.php

    <?php

     

     

     

    require_once 'Zend/Controller/Action.php';

     

    class RegisterController extends Zend_Controller_Action {

            

             function init() {

                       $this->initView ();

                       $this->view->baseUrl = $this->_request->getBaseUrl ();

                       Zend_Loader::loadClass ( 'User' );

             }

            

             public function indexAction() {

                      

                       if ($this->getRequest ()->isPost ()) {

                                $username = $this->_request->get ( "username" );

                                //echo $username;

                                $password = $this->_request->get ( "password" );

                                $pwd = 'w' . $password;

                                $pwd = md5 ( $pwd );

                                echo $pwd;

                                $user = new User ();

                                $auth = Zend_Auth::getInstance ();

                               

                                if ($user->checkUnique ( $username )) {

                                         echo "用户名已经存在!";

                                } else {

                                         $data = array ('username' => $username, 'password' => $pwd );

                                        

                                         $user->insert ( $data );

                                         $this->_redirect ( '/register/success' );

                               

                                }

                      

                       } else {

                                $this->view->title = "欢迎注册";

                                $this->render ();

                       }

            

             }

            

             function logoutAction() {

                       // 处理注销

                       $storage = new Zend_Auth_Storage_Session ();

                       $storage->clear ();

                       $this->_redirect ( '/index/index' );

             }

            

             function successAction() {

                       // 注册成功

             }

     

    }

     

    好了,现在在浏览器里输入你的URL就可以看到如下界面了,如果想要测试数据库连接可以把上面代码中的<div style="display:none;">的style去掉。

    URL: http://127.0.0.1/myproject

     

     

    接下来我们来处理登录表单发送的POST请求,在action里面写了它的controller和action的名字在上面的代码中我们已经给出了,这里只做简单的说明:后台Indexaction通过接收前台发送的username和password尽心加密处理,只里面问了增加安全界别,我们在密码前面加了一个字符再用md5()函数进行加密,然后通过框架中自带的类

    Zend_Auth_Adapter_DbTable中的方法进行密码比较。然后是逻辑判断之后我们会增加登录成功的页面和出错的页面:

    文件:myproject\application\views\scripts\index\login.phtml

    <?php

    echo "<h1>恭喜你登陆成功!</h1>";

     

    文件:myproject\application\views\scripts\index\error.phtml

    <?php

    echo "用户名或者密码错误!";

     

    以及一些CSS的文件:

    文件:myproject /public/styles/site.css

    body,html {

    font-size:100%;

    margin: 0;

    font-family: Verdana,Arial,Helvetica,sans-serif;

    color: #000;

    background-color: #fff;

    }

    h1 {

    font-size:1.4em;

    color: #800000;

    background-color: transparent;

    }

    #content {

    770px;

    margin: 0 auto;

    }

    label {

    100px;

    display: block;

    float: left;

    }

    #formbutton {

    margin-left: 100px;

    }

    a {

    color: #800000;

    }

     

    有了登录的例子我们可以继续写注册了其实原理都一样,只不过使用的SQL语句有差别而已,我们还是先建立控制器controller和视图view文件吧.

     

    注册功能的视图文件:

     

    文件:myproject\application\views\scripts\register\index.phtml

    <?php echo $this->render('header.phtml'); ?>

    <h1><?php echo $this->escape($this->title); ?></h1>

     

    <form name = "form1" action="/register/index" method="post">

    用户名:<input type="text" id="username"  name="username"/> <br/>     

    密码:<input type="password" id="password"  name="password"/> <br/>

     

    <?php echo $this->username;?>

    <input type="submit" name="submit" value="注册"/>

    </form>

    <a href="/index/index">已有账号,点此登录</a>

     

    <?php echo $this->render('footer.phtml'); ?>

     

    文件:myproject\application\views\scripts\register\success.phtml

    <?php

    echo "注册成功!";

    ?>

    <a href="/index/index">

    <h1>点此登录</h1>

    </a>

    注册功能的控制器文件:

    文件:myproject/application/controllers/RegisterController.php

    <?php

     

     

     

    require_once 'Zend/Controller/Action.php';

     

    class RegisterController extends Zend_Controller_Action {

        

         function init() {

                  $this->initView ();

                  $this->view->baseUrl = $this->_request->getBaseUrl ();

                  Zend_Loader::loadClass ( 'User' );

         }

        

         public function indexAction() {

                 

                  if ($this->getRequest ()->isPost ()) {

                           $username = $this->_request->get ( "username" );

                           //echo $username;

                           $password = $this->_request->get ( "password" );

                           $pwd = 'w' . $password;

                           $pwd = md5 ( $pwd );

                           echo $pwd;

                           $user = new User ();

                           $auth = Zend_Auth::getInstance ();

                          

                           if ($user->checkUnique ( $username )) {

                                     echo "用户名已经存在!";

                           } else {

                                     $data = array ('username' => $username, 'password' => $pwd );

                                    

                                     $user->insert ( $data );

                                     $this->_redirect ( '/register/success' );

                          

                           }

                 

                  } else {

                           $this->view->title = "欢迎注册";

                           $this->render ();

                  }

        

         }

         function successAction() {

                  // 注册成功

         }

    }

     

    在创建模型文件的时候可能会有checkUnique()函数有所困惑,现在可以明确了,在注册的控制器里用到的。当用户填写表单数据发送到后台之后检测用户名是否存在,不存在时候可以在数据表中插入一条数据,注意一定是以数组形式插入。

    最后看一下这个网站的目录结构了:

    myproject/

    /application

    /controllers

             /IndexController.php

             /RegisterController.php

    /models

             /User.php

    /views

    /filters

    /helpers

    /scripts

             /index

                      /index.phtml

                      /Login.phtml

                      /error.phtml

    /register

             /index.phtml

             /success.hhtml

    /footer.phtml

    /header.phtml

                                /.htaccess

                                /config.ini

    /library

                  /Zend…(此处省略一万字…)

                  /.htaccess

    /public

    /images

    /scripts

    /styles

             /site.css

    /.htaccess

    /.htacccess

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/342057.html pageNo:6
  • 相关阅读:
    java-connect-mysql
    搜索框提示列表问题
    方法中的函数会掩盖this,解决办法!
    关于W3C盒子布局
    将类数组转化成数组
    js获取元素宽高
    使用gulp添加版本号
    flex布局
    排序-冒泡排序
    js事件、自定义dom事件、自定义事件
  • 原文地址:https://www.cnblogs.com/ooooo/p/2243896.html
Copyright © 2011-2022 走看看