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

- 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 2zend原理剖析、程序调试、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 3Zend 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,然后输出变量

publicfunctionindexAction() { //actionbody //为变量赋值 $this->view->a="Hay"; $this->view->b="bbb"; $this->view->c="ccc"; }

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

publicfunctionindexAction() { //actionbody $array=array( \'a\'=>"Hay", \'b\'=>"bbb", \'c\'=>"ccc", ); $this->view->assign($array); }

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

publicfunctionindexAction() { //actionbody $obj=newstdClass(); $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 的使用和设置

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 classBootstrapextendsZend_Application_Bootstrap_Bootstrap{ publicfunction__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 classAdminControllerextendsZend_Controller_Action{ publicfunctionindexAction(){ $this->view->public=__PUBLIC__;//分配到MVC中的“V”也即视图 $this->render(\'index\');//可以不写 } } ?>

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

<linkrel="stylesheet"type="text/css"href="<?phpecho$this->public;?>/style/admin.css"/>

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

<?php classBootstrapextendsZend_Application_Bootstrap_Bootstrap{ publicfunction__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=newZend_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);

网页名称:【PHP-ZF】基础知识学习笔记(一)
网页地址:https://www.cdcxhl.com/article42/cgjjhc.html

成都网站建设公司_创新互联,为您提供品牌网站建设微信小程序网站排名定制网站小程序开发网站维护

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设