搜索
首页php教程PHP源码ZendFramework1.x新手一看就会用的教程

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

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

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

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

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

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

<?php
require_once &#39;Base.php&#39;;
 
 
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 = &#39;pageCounter&#39;"); //更新计数字段
         
        $where = $db->quoteInto(&#39;columnName = ?&#39; ,&#39;pageCounter&#39;); //生成 where columnName = &#39;pageCounter&#39;这个字符串 它能帮你自动加上&#39;&#39;;
        $orderBy = &#39;commentId&#39;;
         
        $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 &#39;Zend/Layout.php&#39;;
Zend_Layout::startMvc(array(&#39;layoutPath&#39;=>APPLICATION_PATH.&#39;/views/layouts&#39;));
//这里初始化layout目录,也就是我刚刚新建的那个目录,布局文件就存放在那里
 
 
//做完这些 Zend的布局就是初始化完成了 打开IndexController.php 在 主控制器的 init方法里添加以下代码来添加布局的页面
 
//(布局的目的 就是为了把重复的页面利用起来 不产生重复的代码 提高开发效率) 比如一个网站的导航跟底部的网站说明Copyright等等,这些都是可以一次写好的,而不需要每个视图页面都添加
。
 
 
        $resp = $this->getResponse();
 
       $resp->insert(&#39;header&#39; , $this->view->render(&#39;default/header.phtml&#39;));
 
//布局中添加 header 部分
 
        $resp->insert(&#39;footer&#39; , $this->view->render(&#39;default/footer.phtml&#39;));
 
//同理
 
//我们在 视图目录中新建一个 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(&#39;header&#39; , $this->view->render(&#39;default/header.phtml&#39;)); 这行代码中添加的 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 [&#39;userName&#39;] = strtolower ( $fil->filter ( $u [&#39;username&#39;] ) );
                $user [&#39;userPass&#39;] = $fil->filter ( $u [&#39;userpass&#39;] );
//************************************************************
                $auth = Zend_Registry::get ( &#39;authAdapter&#39; );
                 
                $auth->setTablename ( &#39;note_user&#39; )
                     ->setIdentityColumn ( &#39;userName&#39; )
                     ->setCredentialColumn ( &#39;userPass&#39; )
                     ->setIdentity ( $user [&#39;userName&#39;] )
                     ->setCredential ( md5(md5($user [&#39;userPass&#39;])) )
                     ->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字段,这里即填写 &#39;user&#39;
 
//setIdentityColumn() 设置 身份字段 例如 我们的用户名userName字段
//setCredentialColumn() 设置 验证信息字段 例如 我们的用户密码userPassword字段
 
//setIdentity() 设置我们从表单获取的身份的值 例如 用户名table[&#39;username&#39;]
//setCredential() 设置我们从表单获取的认证信息的值 例如 密码table[&#39;userpassword&#39;]
 
//authenticate () 返回认证对象 这个对象包含一个 返回 认证结果的方法 getResultRowObject()
如果认证成功 则返回 一个包含 表中这一行所有字段 的对象 ,认证失败 , 则返回 null
到这里 就可以完成一个简单的登陆页面了 。 这应该算是比较方便了, 当然 这些也可以在模型中实现,这里 zend已经为我们实现了一个简单的数据库认证功能。

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

这里文件上传 Zend提供了一个 Zend_File_Transfer_Http 类 来实现表单文件的处理 
还有一个Zend_File_Transfer来效验文件的信息 比如大小 格式 等等 几乎包含了文件所有的信息,都可以用它来筛选
直接看代码吧
 
            if (isset ( $_FILES [&#39;photo&#39;] )) {
                $upload = new Zend_File_Transfer ();
                $upload->addValidator ( &#39;IsImage&#39;, false ); // 图片格式效验
                if ($upload->isValid ()) { // 合法上传
                     
                    $adapter = new Zend_File_Transfer_Adapter_Http ();
                    $adapter->setDestination ( ROOT . &#39;/upload/&#39; );//设置文件存放的目录 
                    if ($adapter->receive ()) { //是否成功保存
                        print_r ( $adapter->getFileInfo () );
                    }
                }
            }
到此 就能实现简单的文件过滤保存
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。