【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同一个目录
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
a."
"; echo$this->b."
"; echo$this->c."
"; ?>
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'’);
Result: http://localhost/hoge/foo/bar
$this->_redirect(\'http://localhost/hoge/foo/bar?a=1&b=2'\');
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(\'
HI
’);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 由于这个文件每次都被调用,所以就把常量设到这里了,代码如下
步骤二:控制器中代码
view->public=__PUBLIC__;//分配到MVC中的“V”也即视图 $this->render(\'index\');//可以不写 } } ?>
步骤三:视图中代码 index.phtml
P.S.火狐浏览器、google的chrome 不支持绝对路径,使用下面的代码,更换步骤一中代码,其他不变
---------------------------------------------------------------------------------------------------------
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】基础知识学习笔记(一)
本文网址:http://myzitong.com/article/cgjjhc.html