讲师中心 微信公众号
AI工具推荐 视频效率加速

ZendFramework1.x新手一看就会用的教程

老敏君_6181

老敏君_6181

发布时间:2016-05-25 17:09:56

|

2267人浏览过

|

来源于php中文网

原创

1.在project/application/configs/下面新建一个 config.ini文件,添加如下代码

[mysql]
db.adapter = PDO_MYSQL
db.params.host = 127.0.0.1
db.params.username = root
db.params.password =
db.params.dbname = floating_cloud

2.在controllers目录下新建一个Base.php,用于需要数据库的控制器 

<?php
require_once 'Zend/Auth/Adapter/Dbtable.php';
 
class Base extends Zend_Controller_Action{
 
     
    public function init(){
         
        $url = constant("APPLICATION_PATH").'/configs/config.ini';
         
        $dbconfig = new Zend_Config_Ini($url , "mysql");
 
        $db = Zend_Db::factory( $dbconfig->db);
         
        $db->query('set names utf8');
         
        Zend_Db_Table::setDefaultAdapter($db);
         
        $authAdapter = new Zend_Auth_Adapter_DbTable($db);//用于数据库Auth验证
         
        Zend_Registry::set( 'authAdapter' , $authAdapter);//将Zend_Auth_Adapter_DbTable实例保存在全局,供后面使用
    }
}

3. 通过继承Base类使用父类的init()来使用数据库

<?php
require_once 'Base.php';
 
 
class PublicController extends Base{
     
     
    public function init()
    {
        parent::init();
    }
}
//这样 我们就能直接在这个控制器里使用Zend_Db_子类的实例来操作数据库了

4. 这里来新建一个模型,如下代码已经能来操作数据库了

<?php
 
 
class Fc_comment extends Zend_Db_Table_Abstract{
 
    protected $_name = 'fc_comment'; //这个模型要操作的表名 我这里是 fc_comment 表
    protected $_primary = 'commentId'; //这个表里的主键
     
}

5. 编写一个 可以统计浏览次数的页面

<?php
require_once 'Base.php';
 
 
class CountController extends Base{
     
     
    public function init()
    {
          parent::init();
    }
     
    public function indexAction()
    {
        $table = new Fc_comment(); //使用一个fc_comment表 模型的实例
         
        $db = $table->getAdapter(); //获得这个表的适配器 适配器提供了一些方法 可以为我们生成一些SQL语句或者执行语句的方法.
        $db->query("update fc_comment set counter = counter+1 where columnName = 'pageCounter'"); //更新计数字段
         
        $where = $db->quoteInto('columnName = ?' ,'pageCounter'); //生成 where columnName = 'pageCounter'这个字符串 它能帮你自动加上'';
        $orderBy = 'commentId';
         
        $n = $table->fetchAll( $where , $orderBy)->toArray();// 获得查询结果 并转换成数组 
         
        print_r( $n);//测试一下
    }
 
 
}

6. 余下的说明

//zend framework的使用 要注意一些小小的配置 新手最容易遇到 结果导致不能使用 这里zend framework仅表示 zend framework 1.x 并不包括最新发布的zend framework2.0.
 
//安装 zendframework : 下载压缩包 解压 , 在cmd命令行中 输入(我的zf是解压到c:\下面) c:\ZendFramework-1.12.0\bin\zf.bat create project webapp , 来生成工程文件,然后把生成的工程webapp目录复制到apache的www目录下面,把压缩包里的library目录中的 zend目录复制到工程下面的library里面
 
//首先要开启 php的 pdo模块 ,这个在 php.ini配置文件里找到 
//搜索extension=php_pdo_mysql.dll ;如果有 ;extension=php_pdo_mysql.dll 去掉;即可
 
//然后要开启 apache的 rewrite模块 , 在 httpd.conf文件中搜索 LoadModule rewrite_module modules/mod_rewrite.so 如果找到了 并且被注释了  例如 #LoadModule rewrite_module modules/mod_rewrite.so 请去掉#即可
 
//做完了这些 你就可以正常使用 zend framework了.

7.使用Layout布局来装扮我们的视图页面

//(声明 可能这里注释比较多 请耐心的看 希望能把 布局Zend_Layout 讲清楚 其实 布局Zend_Layout 是非常容易用 非常好用的 代码不多 例子比较简单 将就看吧)
 
 
 
// Zend框架的Layput非常强大,可以做出任何你想要做到的排版,要使用Layout布局,我们首先要在 工程目录/application/views/下面新建一个layouts的文件夹
 
//打开 工程目录/public/index.php 文件 在这个入口文件中初始化我们的Layout布局 在/** Zend_Application */ 下面加入以下代码即可
 
require_once 'Zend/Layout.php';
Zend_Layout::startMvc(array('layoutPath'=>APPLICATION_PATH.'/views/layouts'));
//这里初始化layout目录,也就是我刚刚新建的那个目录,布局文件就存放在那里
 
 
//做完这些 Zend的布局就是初始化完成了 打开IndexController.php 在 主控制器的 init方法里添加以下代码来添加布局的页面
 
//(布局的目的 就是为了把重复的页面利用起来 不产生重复的代码 提高开发效率) 比如一个网站的导航跟底部的网站说明Copyright等等,这些都是可以一次写好的,而不需要每个视图页面都添加
。
 
 
        $resp = $this->getResponse();
 
       $resp->insert('header' , $this->view->render('default/header.phtml'));
 
//布局中添加 header 部分
 
        $resp->insert('footer' , $this->view->render('default/footer.phtml'));
 
//同理
 
//我们在 视图目录中新建一个 default文件夹 来存放我们做好的 导航 header.phtml 和 底部fooeter.phtml
 
//现在在 视图目录下 layouts/目录下新建一个 layout.phtml(因为布局文件默认是layout.phtml 后面你可以设置自己的布局文件)
 
//在布局文件 layout.phtml里 你可以这样写
 
 
<div class="header"><?php echo $this->layout()->header?></div>
 
<div class="mainContent">
<?php echo $this->layout()->content;?>
</div>
 
<div class="footer"><?php echo $this->layout()->header?></div>
 
 
//这里的 $this->layout()->header 即是我们在 $resp->insert('header' , $this->view->render('default/header.phtml')); 这行代码中添加的 header.phtml页面 , 同理 footer
 
//而要说的是 这里的 $this->layout()->content 这个显示的是我们 IndexAction 对应的 index.phtml视图文件
 
//同理 如果访问的 是其它的动作 例如 viewAction ,显示的就是对应的视图文件 也就是 view.phtml 
 
//到这里 你就能随心所欲的控制页面的布局了,同时能完成更复杂的 例如带 类似 页面小widget插件的应用出来。

8. 为我们的登陆页面编写验证代码

//翻看一下前面 Base.php 文件的 $authAdapter = new Zend_Auth_Adapter_DbTable($db); 这行代码 ,就是这章要说道的 登陆验证中常用的 数据库验证 废话不多 直接上代码
 
        if ($this->_request->isPost ()) {
 
                $u = $this->_request->getParams ();
                $fil = new Zend_Filter_StripTags ();
                $user = array ();
                $user ['userName'] = strtolower ( $fil->filter ( $u ['username'] ) );
                $user ['userPass'] = $fil->filter ( $u ['userpass'] );
//************************************************************
                $auth = Zend_Registry::get ( 'authAdapter' );
                 
                $auth->setTablename ( 'note_user' )
                     ->setIdentityColumn ( 'userName' )
                     ->setCredentialColumn ( 'userPass' )
                     ->setIdentity ( $user ['userName'] )
                     ->setCredential ( md5(md5($user ['userPass'])) )
                     ->authenticate ();
//************************************************************
                $signup = $auth->getResultRowObject ();
                if (is_object ( $signup )) {
                    echo $signup->userName;
                 
                }
             
        }
//星号之间的部分就是验证用到的代码 此前代码为了获得登陆表单传递来的参数 
 
//这里 $auth 是一个 Zend_Auth_Adapter_DbTable 的实例,Zend_Auth_Adapter_DbTable里提供了五个setXXXX的方法用于设置验证数据库表的参数
 
//setTablename() 方法 设置验证字段所在的表名 例如我们新建一个 user 表 ,表里包含 userId userName userPassword字段,这里即填写 'user'
 
//setIdentityColumn() 设置 身份字段 例如 我们的用户名userName字段
//setCredentialColumn() 设置 验证信息字段 例如 我们的用户密码userPassword字段
 
//setIdentity() 设置我们从表单获取的身份的值 例如 用户名table['username']
//setCredential() 设置我们从表单获取的认证信息的值 例如 密码table['userpassword']
 
//authenticate () 返回认证对象 这个对象包含一个 返回 认证结果的方法 getResultRowObject()
如果认证成功 则返回 一个包含 表中这一行所有字段 的对象 ,认证失败 , 则返回 null
到这里 就可以完成一个简单的登陆页面了 。 这应该算是比较方便了, 当然 这些也可以在模型中实现,这里 zend已经为我们实现了一个简单的数据库认证功能。

9.表单文件上传的安全效验过程

这里文件上传 Zend提供了一个 Zend_File_Transfer_Http 类 来实现表单文件的处理 
还有一个Zend_File_Transfer来效验文件的信息 比如大小 格式 等等 几乎包含了文件所有的信息,都可以用它来筛选
直接看代码吧
 
            if (isset ( $_FILES ['photo'] )) {
                $upload = new Zend_File_Transfer ();
                $upload->addValidator ( 'IsImage', false ); // 图片格式效验
                if ($upload->isValid ()) { // 合法上传
                     
                    $adapter = new Zend_File_Transfer_Adapter_Http ();
                    $adapter->setDestination ( ROOT . '/upload/' );//设置文件存放的目录 
                    if ($adapter->receive ()) { //是否成功保存
                        print_r ( $adapter->getFileInfo () );
                    }
                }
            }
到此 就能实现简单的文件过滤保存

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

0

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

0

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

0

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

220

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

120

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

100

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

60

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn