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.9\bin 目录也添加到系统环境变量中。(为了执行源码中 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配置的域名)
系统入口文件为: quickstart\public\index.php
打开浏览器访问 http://localhost/quickstart/public/index
发现报错
这是因为我们还没有在创建的工程目录中添加Zend框架的核心库文件。
4. 为project添加框架核心库文件。
有两种方法:
(1)在php.ini中直接包含library(好处是 多个project 可以共用一份Zend框架的核心库文件。)
1)将ZendFramework-1.12.9\library 文件夹复制到 php安装目录的lib目录下
例如:我的php安装目录为 C:\wamp64\bin\php\php5.6.25
那么在 C:\wamp64\bin\php\php5.6.25\lib 下创建一个Zend文件夹
将ZendFramework-1.12.9\library复制到Zend文件夹下
2)修改php.ini (如果是Wamp,那么要注意修改的是哪个php.ini,一般在apache安装目录C:\wamp64\bin\apache\apache2.4.23\bin下,为了保险起见,建议将C:\wamp64\bin\php\php5.6.25下的php.ini一并修改)
打开php.ini ,搜索 Windows: "\path1;\path2"
在下面添加 include_path = "c:\wamp64\bin\php\php5.6.25\lib\Zend\library"
(引号中为上述的library所复制的目录。)
如图:
(2) 在工程目录project中导入library
这个方法比较简单,只需要将 ZendFramework-1.12.9\library 文件夹覆盖到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(50) NOT 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
- <?php
- class BaseController extends Zend_Controller_Action
- {
- public function init()
- {
- $url = constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini';
- //这个名称要和application.ini配置的相同,我配置的是[mysql]
- $dbconfig = new Zend_Config_Ini($url , "mysql");
- $db = Zend_Db::factory( $dbconfig->db);
- $db->query('set names utf8');
- Zend_Db_Table::setDefaultAdapter($db);
- }
- }
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
- <?php
- require_once APPLICATION_PATH . '/controllers/BaseController.php';
- require_once APPLICATION_PATH . '/models/UserModel.php';
- class UserController extends BaseController
- {
- public function getUserAction()
- {
- $user = new UserModel();
- $result = $user->fetchAll()->toArray();
- $this->view->result = $result;
- }
- }
创建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/
Zend Framework1 框架入门(针对Windows,包含安装配置与数据库增删改查)的更多相关文章
- SSM框架入门——整合SSM并实现对数据的增删改查功能(Eclipse平台)
一.搭建框架环境 整个项目结构如下: 搭建SSM步骤如下: (1)准备好三大框架的jar包,如图所示 (2)在Eclipse中创建一个web project ,并把这些jar包粘贴到lib文件夹中. ...
- Windows平台安装配置mysql数据库
Windows平台安装配置mysql数据库 作者:Eric 微信:loveoracle11g 去下载mysql软件 https://www.mysql.com/downloads/ https://d ...
- Yii2.0高级框架数据库增删改查的一些操作(转)
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- Yii2.0高级框架数据库增删改查的一些操作
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建
salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建 VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...
- ABP入门系列(6)——展现层实现增删改查
这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...
- ABP入门系列(5)——展现层实现增删改查
ABP入门系列目录--学习Abp框架之实操演练 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP ...
- 搭建ssm框架,可实现登录和数据展示以及增删改查
需求: 后台使用ssm(spring-springMVC-mybatis)进行整合 前台使用bootstrap框架 前后台交互使用Ajax进行发送 表结构: 登录页面后显示所有用户信息,可对每条进行增 ...
- node.js入门学习(四)--Demo图书的增删改查
需求:图书的增删改查,图书数据保存在data.json文件中. 1.Demo结构: 2.首先下载安装node.js,配置环境变量:参考博客 3.项目初始化 1)创建项目根目录node-hello,进入 ...
随机推荐
- SICP-1.6-高阶函数
高阶函数 将函数作为参数 例如 def sum_naturals(n): total, k = 0, 1 while k <= n: total, k = total + k, k + 1 re ...
- Vue按需加载提升用户体验
Vue官方文档异步组件: 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了让事情更简单, Vue.js 允许将组件定义为一个工厂函数,动态地解析组件的定义.Vue.js 只在组 ...
- Swift3 访问权限fileprivate和 open
在swift 3中新增加了两种访问控制权限 fileprivate和 open. 下面结合网上资料和个人理解整理一下两个属性的原理与介绍. fileprivate 在原有的swift中的 privat ...
- CentOS7安装docker 启动不了解决篇
[root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redi ...
- IP命令
ip命令是Linux下较新的功能强大的网络配置工具. 1 功能 ip命令用来显示或操纵Linux主机的路由.网络设备.策略路由和隧道. 2用法 Usage: ip [ OPTIONS ] OBJECT ...
- Mongodb基础用法及查询操作[转载]
插入多条测试数据> for(i=1;i<=1000;i++){... db.blog.insert({"title":i,"content":&qu ...
- USACO Ordered Fractions
首先看一下题目 Consider the set of all reduced fractions between 0 and 1 inclusive with denominators less t ...
- Java 数据库编程 ResultSet 的 使用方法
结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据 ...
- Java 数据类型在实际开发中应用
在前边的博文中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型.在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的 ...
- python+selenium自动化测试环境安装
因为自己安装自动化测试环境时,遇到过许多问题,自己整理了一下安装的步骤,感谢那些帮助过我的人. 1.安装python,我装的是3.5版本,网络上也有许多安装步骤,照着就可以了(其实一直下一步也行) 不 ...