• Zend Framework1 框架入门(针对Windows,包含安装配置与数据库增删改查)


     

     

    最近公司接的项目需要用到Zend Framework框架,本来需要用的是ZendFramework2 ,但是由于原有代码使用了ZendFramework1 框架,所以顺带学习了。现将一些基础入门记录一下,以供后用。

    一. 搭建zend framework1开发环境

      1. 下载框架源码,下载后解压到本地。

        下载地址:https://packages.zendframework.com/releases/ZendFramework-1.12.9/ZendFramework-1.12.9.zip

      2. 利用源码生成project

        环境准备:

        (1)首先要保证自己本地环境安装配置了Apache和PHP。  (为了方便,我使用的是 wamp

        (2)将php.exe的路径添加到系统环境变量中。将解压后的ZendFramework-1.12.9in 目录也添加到系统环境变量中。(为了执行源码中  zf 命令)

       安装:

        运行cmd   进入apache配置的workspace目录,(wamp就是www目录,xampp就是htdocs目录)

        执行:(quickstart为项目名称,可以自定义)

          zf create project quickstart 

        结果如下:

         

        然后看workspace文件目录下多出一个文件夹 quickstart

          目录如下:

          

          public 为公开目录

          application 为代码目录

          library 为库文件目录

          tests 为测试目录

          .zfproject.xml 为路由配置文件

        

      3. 启动apache,尝试访问index

        url: http://localhost/quickstart/public/index    (localhost为apache配置的域名)

        系统入口文件为: quickstartpublicindex.php

         打开浏览器访问 http://localhost/quickstart/public/index

        发现报错

          

          这是因为我们还没有在创建的工程目录中添加Zend框架的核心库文件。

        

      4. 为project添加框架核心库文件。

        有两种方法:

          (1)在php.ini中直接包含library(好处是 多个project 可以共用一份Zend框架的核心库文件。) 

            1)将ZendFramework-1.12.9library 文件夹复制到 php安装目录的lib目录下

                 例如:我的php安装目录为 C:wamp64inphpphp5.6.25

               那么在 C:wamp64inphpphp5.6.25lib 下创建一个Zend文件夹

                  将ZendFramework-1.12.9library复制到Zend文件夹下

            2)修改php.ini  (如果是Wamp,那么要注意修改的是哪个php.ini,一般在apache安装目录C:wamp64inapacheapache2.4.23in下,为了保险起见,建议将C:wamp64inphpphp5.6.25下的php.ini一并修改)

               打开php.ini ,搜索  Windows: "path1;path2"

               在下面添加   include_path = "c:wamp64inphpphp5.6.25libendlibrary" 

                      (引号中为上述的library所复制的目录。)

               如图:

                

          (2) 在工程目录project中导入library 

             这个方法比较简单,只需要将  ZendFramework-1.12.9library 文件夹覆盖到project目录下就可以了。  

     

        搞定之后再刷新 网页。

          

        出现以上画面,恭喜你,成功了!

     

    二. 配置使用layout 和 配置文件application.ini  , .zfproject.xml 简介。

      1.  使用layout

        初始安装后的zend1框架只有初始结构,我们需要引入layout布局

        运行cmd 进入project目录,执行   zf enable layout 

          如图:

          

       然后看project目录结构,发现多了layouts文件夹。

       再次刷新网页 http://localhost/quickstart/public/index

        

        发现多了title和一系列东西。是不是很神奇,如果想修改layout可以去修改layouts文件夹下面的layout.phtml,关于layouts就说到这里。

      2. 配置文件简介

        首先明确一点,zendframework1是标准的MVC模式的框架。

        (1)application/configs/application.ini是配置文件

          内容如下:

           

           初始状态下,包含了一些路径的配置以及错误状态码。

           这个配置分三种环境,生产环境production,开发环境development,测试环境testing。

            生产环境的error_code = 0是为了不报错,其他环境都应该设置为1。

           以后要使用的数据库配置等信息,需要添加到这个文件中。

        (2)project根目录下的.zfproject.xml是路由文件,里面配置了能够访问的路由信息

          如图:

          

          我们自己添加到Controller和view都需要写入这个文件中

            controller需要写入controllersDirectory标签里

              controllerName 为controller名 去掉后缀

              actionName为action名 去掉后缀

            view需要写入viewsDirectory标签里

              forControllerName 为view所属的controller名

              forActionName 为view所属的action名

          我们需要访问的路由信息都应该加入这个文件,不然可能会报错404。具体见后面的mysql应用。

    三. Mysql配置及增删改查应用。

      1. Mysql配置

        (1)首先创建并配置数据库

          由于我使用的是wamp,所以直接用phpMyAdmin,创建一个数据库 quickstart (名字自定义).

          创建数据表

    CREATE TABLE `quickstart`.`m_user`
     (
         `id` INT NOT NULL AUTO_INCREMENT ,
         `name` VARCHAR(50NOT NULL , 
         PRIMARY KEY (`id`)
     )

           插入数据

    INSERT INTO `m_user` (`id`, `name`) VALUES
    (1, 'name1'),
    (2, 'name2'),
    (3, 'name3'),

           在application.ini底部加入如下配置

    [mysql]
    db.adapter=PDO_MYSQL
    db.params.host=localhost
    db.params.username=root
    db.params.password=
    db.params.dbname=quickstart

           [mysql]名字可以自定义,后面会用到

            host为数据库服务器地址   

            username为数据库服务器用户名

            password为密码

              dbname为刚才创建的数据库名

       (2)初始化数据库适配器
            一般来说需要用到数据库的地方才需要初始化适配器,合理的做法是写在每个控制器的init方法里,
          但是这样还是很麻烦,而且代码冗余,因此抽象出一个BaseController控制器,将初始化数据库适配器
          放在BaseController的init()方法里,在需要使用数据库的控制器再继承这个新的控制器。
          新建文件: controllers/BaseController.php

     1 <?php  
     2 class BaseController extends Zend_Controller_Action  
     3 {  
     4     public function init()  
     5     {  
     6           
     7         $url = constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini';  
     8         //这个名称要和application.ini配置的相同,我配置的是[mysql]  
     9         $dbconfig = new Zend_Config_Ini($url , "mysql");  
    10         $db = Zend_Db::factory( $dbconfig->db);  
    11         $db->query('set names utf8');  
    12         Zend_Db_Table::setDefaultAdapter($db);  
    13     }  
    14 }

           zend framework的控制器必须继承Zend_Controller_Action,如果没继承这个类就不是控制器

       (3)创建表模型 UserModel

          一般来说一个表对应一个模型,模型的PHP文件应该写在models文件夹下面

         新建文件:models/UserModel.php

    <?php  
    class UserModel extends Zend_Db_Table{  
        protected $_name='m_user';  
        protected $_primary='id';  
    }  

              模型层的php也要继承一个类Zend_Db_Table否则就不是模型,

           $_name 为数据库的表名,$_primary为表的主键(主键的默认字段就是id,如果是这种情况主键可以不配置)

       (4)使用数据库实现简单查询操作

         增删改查操作需要调用Zend_Db_Table提供的方法。

          创建我们自己的控制器UserController,继承BaseController

           新建文件:UserController.php

     1 <?php
     2 require_once APPLICATION_PATH . '/controllers/BaseController.php';
     3 require_once APPLICATION_PATH . '/models/UserModel.php';
     4 
     5 class UserController extends BaseController
     6 {
     7     public function getUserAction()
     8     {
     9         $user = new UserModel();
    10         $result = $user->fetchAll()->toArray();
    11         $this->view->result = $result;
    12     }
    13 }

           创建view  

         新建文件:views/scripts/user/get-user.phtml

    <?php var_dump($this->result);?>
    

         (zend框架view的命名是根据Controller里的Action名,如果Action名采用驼峰式命名,则view将相应的大写转小写,并在前面加"-")

          修改路由文件.zfproject.xml

         在<viewScriptsDirectory>标签里添加

    <viewControllerScriptsDirectory    forControllerName="User">
                 <viewScriptFile forActionName="getUser" />
    </viewControllerScriptsDirectory>

         在<controllersDirectory>标签里添加

    <controllerFile controllerName="User">
            <actionMethod actionName="getUser" />
    </controllerFile>

         

          演示效果

         在浏览器地址栏输入   http://localhost/quickstart/public/user/get-user

          (url规则为: 域名+project名+public+controller名+view名;如果将public文件夹设置为 访问目录,则url为: 域名+controller名+view名) 

        

        如图能够输出db中的内容,则为成功。

    四.  增删改查

      1.插入操作

        插入数据一般需要从前台form获取数据,然后在客户端和服务端进行验证check后,调用insert方法插入数据库。

         insert方法需要将待插入的数据组成一个关联数组,key为列名,将此数组当作insert方法的参数

         为了方便,就不做form,直接将数据写在URL之中,然后在后台获取,代码如下:

        public function insertUserAction() {
            // action body
            $user = new UserModel();
            $name = $this->getRequest ()->getParam ( "name" );
            $set = array (
                    "name" => $name
            );
            $user->insert ( $set );
            $this->getUserAction();
        }

         为了便于显示效果,在插入后,我直接调用了之前的getUserAction,跳转到get-user画面获取db数据然后显示。

         将这段代码加入UserController中。

         在.zfproject.xml中加入路由配置信息。

    <controllerFile controllerName="User">
        <actionMethod actionName="insertUser" />
    </controllerFile>
    <viewControllerScriptsDirectory   forControllerName="User">
        <viewScriptFile forActionName="insertUser" />
    </viewControllerScriptsDirectory>

         页面演示:url:   http://localhost/quickstart/public/user/insert-user?name=name_insert

           

        最后一条即为刚刚插入的数据。

      2.删除操作

        这个操作也很简单直接调用delete方法就行,但是需要传入一个参数,即要删除数据的id

          代码如下:

        public function deleteUserAction() {
            // action body
            $user = new UserModel();
            $id = $this->getRequest ()->getParam ( "id" );
            $adapter = $user->getAdapter ();
            $where = $adapter->quoteInto ( "id=?", $id );
            $user->delete ( $where );
            $this->getUserAction();
        }

         参照 插入操作 在.zfproject.xml中加入路由配置信息。

         页面演示:  删除id=5的数据

           url: http://localhost/quickstart/public/user/delete-user?id=5

            

        id=5的数据已经不存在了,删除成功。

      3.更新操作

        更新数据调用update方法,和insert类似,需要将待修改的数据组成一个关联数组,key是列名,然后在where条件中添加要更新的id信息。

        代码如下:   此次,只获取了id,也可以获取name信息,然后将$set 进行修改即可, "name"=>$name  

        public function updateUserAction() {
            // action body
            $id = $this->getRequest ()->getParam ( "id" );
    
            $user = new UserModel();
            $adapter = $user->getAdapter ();
            $set = array (
                    "name" => "name".$id."_update"
            );
            $where = $adapter->quoteInto ( "id=?", $id );
            $user->update ( $set, $where );
            $this->getUserAction();
        }

         在.zfproject.xml中加入路由配置信息。

        页面演示: url:http://localhost/quickstart/public/user/update-user?id=2

         

         id = 2的信息被成功修改。

      4.查询操作

        考虑到sql注入,需要使用adapter,quoteinto起到的作用就是转义,避免sql注入

        查询条件为:  查询 id>1 并且 name不等于name2_update的所有数据,并按照id降序排序

        代码如下:

        public function getUserDetailAction()
        {
            $user = new UserModel();
            $adapter = $user->getAdapter ();
            $whereCondition = $adapter->quoteInto ( "name<>?", "name2_update" ) . $adapter->quoteInto ( "and id>?", 1 );
            $orderCondition = 'id desc';
            $result = $user->fetchAll($whereCondition,$orderCondition)->toArray();
            $this->view->result = $result;
            $this->render ( "get-user-detail" );
        }

        在views/scripts/user下创建get-user-detail.phtml 

         内容为  <?php var_dump($this->result);?> 

        在.zfproject.xml中加入路由配置信息。

        页面演示:

        url:http://localhost/quickstart/public/user/get-user-detail

        

        符合条件的数据被全部查出。

      以上就是关于zf1框架的配置使用以及mysql关联增删改查的操作,如有问题请联系。

      感谢查阅~~~

    参照:

      http://blog.csdn.net/walkcode/article/details/16840243

      http://www.zendframework.org.cn/learn/

    自动化测试交流群:617352502
  • 相关阅读:
    java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
    文件上传设置上传文件大小
    layui form.on('select(xxx)',function(){});绑定失败
    列表显示, 内容过长省略显示, 鼠标停留在内容上显示全部内容
    mybatis : ERROR. token : COMMA, pos : 373
    js判断手机系统
    vue v-nav指令属性列表
    第五节 tensorboard可视化
    第四节 生成随机张量和张量合并
    第三节 张量
  • 原文地址:https://www.cnblogs.com/vincent-li666/p/7273701.html
Copyright © 2020-2023  润新知