文档章节

【PHP-ZF】基础知识学习笔记(一)

呢喃的猫咪
 呢喃的猫咪
发布于 2012/11/07 23:04
字数 2042
阅读 219
收藏 2
点赞 0
评论 0

-  zendframework官网

class 1  初步认识php zendframework 框架、配置开发环境、创建zf项目

1.php常用框架:zendframework,thinkphp(国人开发),yii(外企用的较多),cakephp

2.mvc框架:model 模型,view 试图,controller 控制器

3.zf的优势:固定的文件夹归类,程序更加规范化,开发效率提高了,程序的可读性增加,可维护性增加等等,不足之处就是配置比较复杂。

4.开发环境配置步骤:
    1-下载库,
    2-创建zf工程(手工创建,使用ZendStudio创建zf项目,使用zf.bat程序创建--进入zf.bat所在目录,使用zf.bat create project 项目路径 创建项目)详细见:http://my.oschina.net/maomi/blog/86080
    3-使用zendstudio创建一个空项目
    4-把创建的项目结构拷贝到新建的空项目中
    5-引入zf库到该项目中,将zf解压后library中的zend包拷贝到library目录下即可
    6-配置apache,让它支持zf框架(wamp配置步骤见:http://my.oschina.net/maomi/blog/86076
        6.1开启PDO和PDO相关数据库引擎
            ;extension=php_pdo_mysql.dll 去掉前面的分号就可以(wamp已经配置好这一点)
        6.2开启apache的rewrite模块
            在httpd.conf文件中,启用 LoadModule rewrite_module modules/mod_rewrite.so
            再将, AllowOverride None 改成  All
    7-配置虚拟主机(自定义和wamp安装环境不一样)
        自定义:在httpd.conf文件中,启用---->
          
            dns 添加示例: 127.1.10 marong.com // 前面是ip地址,后面是在浏览器中输入的地址
    8-重新启动apache服务器

---------------------------------------------------------------------------------------------------------

class 2  zend原理剖析、程序调试、zend整合数据库

1.zend原理剖析
    hosts 127.0.0.1 marong.com :
    浏览器地址 marong.com ----http请求---->apache服务器----转发给index.php------>public/index.php(总控,apache 使用反射机制)-------->controller/indexController.php(分控:init方法默认执行 - indexAction方法执行[可以使用model] - 引入对应模板视图)------------>生成静态页面--------->apache服务器--------->浏览器

2.程序
    1-使用 file_put_contents在不中断程序的情况下,输出信息到文件,可以随时查看记录
    2-可以通过debug工具来完成调试
    3-如果提示 require_once()所引用的文件不存在,则可以将文件的引用路径改为绝对路径
        如: require_once APPLICATION_PATH.'../models/Message.php'; 
        其中,APPLICATION_PATH是在总控中初始化的全局变量

3.zend整合数据库(示例)
    1-在application.ini中配置数据库信息
        [mysql]
        db.adapter = PDO_MYSQL
        db.params.host = localhost
        db.params.username = root
        db.params.pwd = root
        db.params.dbname = test
    2-在bootstrap.php中初始化数据库适配器
        (最好是新建一个抽象父类baseController,该类专门供其他需要初始化数据库的类来继承,继承该类的子类必须
        require_once(‘baseController.php’))
        class BaseController extends Zend_Controller_Action{
            public function init(){

                

            }

         }

    注意:http://blog.csdn.net/wang_jingxiang/article/details/6011210 (另一种配置数据库的方法)

    3-在models文件夹中编写模型类(模型类文件名应该跟要操作的数据表名称相同)
    //设置私有变量,数据库表名和表的主键
    4-在indexController的index方法中,实例化模型类并查询数据,将数据传递给模板对象
    
    5-在模板中引用变量
    6-在.htaaccess文件中设置url重写规则,将所有以.php结尾的地址都指向 index.php总控文件,让项目只有一个入口

4.新建控制器方法和对应视图

5.注意事项
    1-控制器中的方法名(Action前面的单词)必须是小写,否则将无法正常解析
    2-必须设置url重写规则,保证项目只有一个入口文件(存在不理解的问题,待解决)

---------------------------------------------------------------------------------------------------------

class 3  Zend Framework 中 layout和view详解

1、使用Zend_View与Zend_Layout玩布局

layout是非常方便的视图库,这里列举常用的ZF版本为1.11.11的具体用法
在layout中加载其他layout页面
默认的layout页面,nav页面与layout同一个目录

<?php $this->render('nav.phtml') ?>

设置其他layout或关闭:

//设置其他 控制器中的layout 
$this->_helper->layout->setLayout('japan_layout'); 

//设置其他 视图中的layout  
$this->layout()->setLayout('chinese_layout');  

//关闭 控制器中的layout 
$this->_helper->layout->disableLayout(); 

//关闭 视图中中的layout  
$this->layout()->disableLayout();

2、如何在controller中传递变量到view,然后输出变量

public function indexAction()
    {
        // action body
        //为变量赋值
     $this->view->a = "Hay";
     $this->view->b = "bbb";
     $this->view->c = "ccc";
    }

从上边的程序可以看出来,用此方式赋值特麻烦,要多次赋值。可以将变量放进一个数组或者对象中。assign()方法呢就允许通过数组或者对象赋值:

public function indexAction()
    {
        // action body
       $array = array(
       'a' => "Hay",
       'b' => "bbb",
       'c' => "ccc",
       );
       $this->view->assign($array);
    }

其效果和上边效果是一样的,那么通过对象赋值就有点小不一样了,就是要先把对象转型为数组: 

    public function indexAction()
    {
         // action body
         $obj = new stdClass();
         $obj->a = "Hay";
         $obj->b= "bbb";
         $obj->c = "ccc";
         $this->view->assign((array) $obj);
    }

assign()方法还有一种用法就是使用两个字符串作为assign()方法的参数。这样第一个参数为赋值的变量名,第二个参数作为对应的值。如下:

     $this->view->assign('a',"Hay");
     $this->view->assign('b',"bbb");
     $this->view->assign('c',"ccc");

至于视图部分代码如下:index.phtml

<?php 
    echo $this->a."<br>"; 
    echo $this->b."<br><br><br><br>";
    echo $this->c."<br>";
?>

3、禁用视图并输出内容

     a、先输出内容再禁用试图

$this->_helper->viewRenderer->setNoRender(true); // 可省略
print_r(Zend_Json::encode(array('error'=>403))); // 输出内容
exit(); // 禁用试图
return; // 可省略

    输出结果:

{"error":403}

    b、直接禁用试图同时输出内容

$this->_helper->viewRenderer->setNoRender(true); // 可省略
exit(json_encode(array('error'=>403))); 
return; // 可省略

    输出结果:

{"error":403}

    c、通过抛出“error”关闭视图

exit(json_encode('error')); //"error" 
exit('error'); //error

4、render,_forward,_redirect的用法和区别

  • render:
    不指定render
    结果:<当前Module>/<当前Controller>/<当前Action>.phtml
    $this->render(‘bar’);
    Result: <当前Module>/<当前Controller>/bar.phtml

  • _forward:
    $this->_forward(‘bar’);
    Result: <当前Module>/<当前Controller>/bar
    $this->_forward(‘bar’,’foo’);
    Result: <当前Module>/foo/bar
    $this->_forward(‘bar’,’foo’,’hoge’);
    Result: hoge/foo/bar
    $params = array(
         ‘a’ -> ‘1’,
         ‘b’ -> ‘2'
    );
    $this->_forward(‘bar’,’foo’,’hoge’,$params);
    Result: hoge/foo/bar/a/1/b/2

  • _redirect:
    $this->_redirect(‘/hoge’);
    Result: /hoge
    $this->_redirect(‘/hoge/foo’);
    Result: /hoge/foo
    $this->_redirect(‘/hoge/foo/bar’);
    Result: /hoge/foo/bar
    $this->_redirect(‘http://localhost/hoge/foo/bar&#39’);
    Result: http://localhost/hoge/foo/bar
    $this->_redirect('http://localhost/hoge/foo/bar?a=1&b=2&#39');
    Result: http://localhost/hoge/foo/bar?a=1&b=2 

5、placeholder 的使用和设置

//在bootstarp中
 $this->bootstrap('view');
 $view = $this->getResource('view');
//成功调用了placeholder
 $view  ->placeholder('test’) ->setPrefix('<h1>HI</h1>’);

  • placeholder 的设置在你的applicateion.ini中加入 resources.view[] = "" ;如果没有这个设置,你的bootstrap中的$this->bootstrap('view');将会报错 

---------------------------------------------------------------------------------------------------------

class 4  ZendFramework 如何引入css、图片、及js代码

    虚拟目录指向 public 目录:

    引入图片时,可以设置虚拟目录,用'/images/a.jpg'这样的方式来引入public目录下的图片,css等内容。

    虚拟目录指向非 public 目录:

    解决:方法是使用绝对路径来引入css,这样就绝对错不了了,因此考虑设置一个常量,路径直指public

    步骤一:Bootstrap.php 由于这个文件每次都被调用,所以就把常量设到这里了,代码如下

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
    public function __construct($application){
        parent::__construct($application);
        $url = dirname(__FILE__);//获取当前文件Bootstrap.php目录路径
        $url = str_replace('application','public',$url);//把当前路径更换为public路径
        $url = str_replace('\\','/',$url);//更改路径中的“\”为“/”
        define('__PUBLIC__',$url);//定放常量
    }
}
?>

    步骤二:控制器中代码

<?php
class AdminController extends Zend_Controller_Action{
    public function indexAction(){
        $this->view->public=__PUBLIC__;//分配到MVC中的“V”也即视图
        $this->render('index');//可以不写
    }
}
?>

    步骤三:视图中代码 index.phtml

<link rel="stylesheet" type="text/css" href="<?php echo $this->public; ?>/style/admin.css" />

    P.S.火狐浏览器、google的chrome 不支持绝对路径,使用下面的代码,更换步骤一中代码,其他不变

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
    public function __construct($application){
        parent::__construct($application);
        $url = $_SERVER['SCRIPT_NAME'];
        $url = dirname($url);
        $url = str_replace('\\','/',$url);
        define('__PUBLIC__',$url);
    }
}
?>

---------------------------------------------------------------------------------------------------------

class 5  ZendFramework 配置链接MySQL实例

在application/configs/application.ini中添加数据库的配置信息

[production]    //在这一行的后面添加数据库连接信息  
resources.db.adapter = PDO_MYSQL  
resources.db.params.host = 127.0.0.1  
resources.db.params.username = root  
resources.db.params.password =   
resources.db.params.dbname = zend_example

在index.php入口文件中加入:

$config = new Zend_Config_Ini('../application/configs/application.ini','production');  
$register = Zend_Registry::getInstance();  
$register->set('config', $config);  
$db = Zend_Db::factory($config->resources->db);  
Zend_Db_Table::setDefaultAdapter($db);





© 著作权归作者所有

共有 人打赏支持
呢喃的猫咪

呢喃的猫咪

粉丝 133
博文 121
码字总数 300412
作品 0
杭州
程序员

hjimce算法类博文目录 个人博客:http://blog.csdn.net/hjimce 个人qq:1393852684 知乎:https://www.zhihu.com/people/huang-jin-chi-28/activities 一、深度学习 深度学习(七十)darknet...

hjimce ⋅ 2016/01/24 ⋅ 0

我的Python3萌新入门笔记

我的Python3萌新入门笔记 Python自动化运维2017-12-128 阅读 Python教程 先来个镇楼图! Python3萌新入门笔记是一系列真实的自学笔记。 当然,它也是比较全面的入门教程。 到上一篇笔记为止,...

Python自动化运维 ⋅ 2017/12/12 ⋅ 0

MySQL入门教程系列-1.5 如何学习MySQL

在这里持续更新 MySQL入门教程系列-1.5 如何学习MySQL 如何学习 MySQL 这是一个伪命题,每个人都有适合自己的一套学习方法,各

同一种调调 ⋅ 2016/09/28 ⋅ 0

读《PHP和MySQL Web开发》

【第一部分】PHP基础与入门 1、PHP学习笔记1:基础知识快速浏览 http://my.oschina.net/bluefly/blog/472673 2、PHP学习笔记2:文件 http://my.oschina.net/bluefly/blog/477601 3、PHP学习笔...

slyso ⋅ 2015/07/14 ⋅ 0

自省

就在前两天写完一部分Handler源码分析的文章后意识到了两个问题: 现在的学习进度太慢了,如果以这个速度下去定好的目标根本完不成。 我忘了来简书的初心,来简书不是来交朋友的,也不是为了...

吴七禁 ⋅ 2017/11/10 ⋅ 0

《好好学习》我的读书心得

图片发自简书App ✨关于本书 这是一本讲学习方法,讲如何管理自己知识的书。它将帮助你把零碎的知识打造成为高效的知识管理体系,构建你的学习竞争力,让所学知识真正变成你的资产,让学习成...

lily哩离理力 ⋅ 2017/12/08 ⋅ 0

来自IOS开发工程师的零基础自学HTML5经验分享

移动互联网的火爆,而Html具有跨平台、开发快的优势,越来越受到开发者的青睐。感谢IOS开发工程师“小木_Boy”’带来的HTML5学习经验分享。 一、学习途径 1、很多视频网站 比如慕课、和极客学...

inw3cschool ⋅ 2017/03/21 ⋅ 0

python资料全集

python: 微信公众号开发小记——2.80端口上的服务 python: 微信公众号开发小记——3.接入三方登录 使用python编写一个壁纸网站的简单爬虫 python: python List 用法 Python 中各个时间复杂度...

d_watson ⋅ 2016/04/15 ⋅ 0

圣殿骑士博文索引

“圣殿骑士”技术博客,书写自己对技术的理解。天道酬勤、坚持不懈! 圣殿骑士很荣幸入住博客园和51CTO写技术博客,目前主要在一家外资企业从事项目管理、技术架构及企业技术培训工作。由于工...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

一文总结学习 Python 的 14 张思维导图

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列...

马哥教育 ⋅ 2017/10/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JEPLUS主从功能配置之主从布局的设置——JEPLUS软件快速开发平台

JEPLUS主从功能配置之主从布局的设置 主从功能配置成功之后就需要根据业务需求来调整主从功能的数据显示方式,不同的主从数据的显示可以达到不同的主从数据显示效果,今天这篇笔记就讲解一下...

JEPLUS ⋅ 1分钟前 ⋅ 0

如何利用极光推送的新功能玩转世界杯营销

四年一次的世界杯已经于6月14日开赛!对于app的运营人员而言,这场远在俄罗斯的绿茵征战绝不仅仅牵动着球迷们的心,更拨动着众多互联网企业运营人员的神经。在这场营销大战中,push显然是app...

极光推送 ⋅ 5分钟前 ⋅ 0

Spring Cloud构建微服务架构-Hystrix依赖隔离

依赖隔离 “舱壁模式”对于熟悉Docker的读者一定不陌生,Docker通过“舱壁模式”实现进程的隔离,使得容器与容器之间不会互相影响。而Hystrix则使用该模式实现线程池的隔离,它会为每一个Hys...

itcloud ⋅ 7分钟前 ⋅ 0

SpringCloud 微服务 (八) 统一配置中心 Config Server&Client

壹 Spring Cloud Config 统一配置中心,方便维护配置文件,对一些公司对数据库密码等敏感的信息,对普通开发人员不公开,放在运维人员手上,对配置作一个隔离作用,另外项目线上的配置改动都要重新...

___大侠 ⋅ 11分钟前 ⋅ 0

echarts轮播地图并结合鼠标浮动点击

直接上代码 timeId=setInterval(function () { if(count<11){ myChart.dispatchAction({ type: 'downplay', ......

莫西摩西 ⋅ 14分钟前 ⋅ 0

基于 HTML5 的工业互联网 3D 可视化应用

工业企业中生产线处于高速运转,由工业设备所产生、采集和处理的数据量远大于企业中计算机和人工产生的数据,生产线的高速运转则对数据的实时性要求也更高。破解这些大数据就是企业在新一轮制...

xhload3d ⋅ 16分钟前 ⋅ 0

Nging启动与停止bat

start_nginx.bat @echo off  f:  cd F:\server\nginx-1.13.6  echo "nginx is starting on port 80"  start "" "nginx.exe"  exit   stop_nginx.bat @echo off::windows ......

Jay丶 ⋅ 18分钟前 ⋅ 0

SuRF: 一个优化的 Fast Succinct Tries

作者:唐刘 在前一篇文章中,我简单介绍了 Succinct Data Structure,这里我们继续介绍 SuRF。 Fast Succinct Tries SuRF 的核心数据结构就是 Fast Succinct Tries(FST),一种空间节省,支...

TiDB ⋅ 22分钟前 ⋅ 0

Kubernetes(六) - Secret和私有仓库认证

对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件...

喵了_个咪 ⋅ 24分钟前 ⋅ 0

DevOps的三大原则

DevOps的出现有其必然性。在软件开发生命周期中,遇到了两次瓶颈。第一次瓶颈是在需求阶段和开发阶段之间,针对不断变化的需求,对软件开发者提出了高要求,后来出现了敏捷方法论,强调适应需...

inidcard ⋅ 24分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部