ZF项目总结

来源:互联网 发布:js获取第二个子元素 编辑:程序博客网 时间:2024/06/06 16:45

一、准备工作

  1、使用ZF要求的最低版本、开启PDO

  2Apache需要开启 rewrite模块

     打开httpd.conf 文件开启rewrite_module 模块,

     开启.htaccess目录识别 AllowOverride  None 改成 all

二、使用框架

   1、手动建立相关目录

 

  2、写配置文件config.ini

在此文件填写ZF路径、数据库信息、前端控制器frontController的分组模块modules目录位置、分组目录下controllers文件夹的名字、分组目录下的不同控制器路径、默认模块是哪个;

填写数据库信息;

填写时区、异常处理等信息;

  3、填写入口程序文件index.php

  1.入口程序定义了两个个常量:

      APPLICATION_PATH----指向application目录

APPLICATION_ENV-------一般填开发环境

  2).ZF框架所在路径包含进当前脚本运行时include路径

set_include_path(implode(PATH_SEPARATOR, array(

    realpath(APPLICATION_PATH . '/../library'),

    get_include_path(),

)));

 3).$application->bootstrap()->run();

 

三、项目设计思路

1、前端页面和后台controller的交互

    前台页面先使用AJAX和后台交互验证密码,验证成功后再利用JS地址跳转再次请求后台,进入后台;

好处:ajax不用刷新页面即可与后台通信,用户体验好,登陆按钮采用的是<a>标签配背景图片,不使用button提交

后台页面首次接受请求后先给浏览器一个登陆页面---默认的index.phtml,前端AJAX验证密码过程中调用model逻辑处理数据库,JS请求后再给前台一个登陆页面。

2、区分合并在同个action中的不同逻辑

后台检查前台请求中有无传递一个flag变量,如果有则调业务逻辑,无则为首次进去,给前台一个页面即可;

 

3controllers的设计思路

   当这个controller类中的不同action(即不同方法)需要多次使用某一个或者多个变量,或者是在该类实例化时就连接数据库、或者实例化一个业务处理model类,考虑到方便,这时可以把该变量作为该controller类的成员变量来供action公共使用,在变量的初始化及相关操作则放置init()方法中完成,改方法是构造函数最后调用的一个任务;

  

 

四、内置函数的使用

     $this->view->baseUrl();   内置方法

五、常识

   Controller可以直接实例化model

   Controller可以直接调用view类方法赋值,类似smarty

 

   每个模块的使用方法都是搞清楚了功能以后

      1.先实例化改组件类   2.调用该类的方法

 

六、各模块讲解

 1Bootstrap   引导程序

 2/public/index.php  入口程序

在入口程序中重新设定了set_include_path,这样比Define 一个代表地址的常量再拼接更方便,连常量都省了,直接include就行了。

然后初始化Zend_Application类,这个类的作用如下:

Initialize application. Potentially initializes include_paths, PHP settings, and bootstrap class.

这个类也初始化了bootstrap 引导程序,调用它的run()方法运行程序。

值得一提的是在Bootstrap 文件中有两个以_ _init开头的方法,__construct 方法的最后一个调用的任务

_initAppAutoload()   _initDatabase() 

所以相当于在构造方法中完成了一个功能---拿到一个数据库的连接,以后使用数据库的时候不需要在构造了,因为参数比较麻烦,而Controller里的业务处理经常需要用到model层的操作,而model需要调用数据库连接;所以这是一个技巧,需要重复使用的东西单独提炼出来。

 

 

 

七、前端控制器

Zend_Controller_Front目的在于初始化请求环境,并路由到来的请求,接着分发任何发现的动作;收集所有的响应,在整个过程完成时就其返回。 

 前端控制器中访问环境的方法中有(set|get)Request()方法指定分发过程中使用的请求类或对象,以及获取当前的请求对象。设置请求对象时,可以传入一个请求类的名字,该方法将加载类文件并创建实例。

class Zend_Controller_Request_Http extends Zend_Controller_Request_Abstract类中有个得到PHP中超全局变量POST的方法getPost($key = null, $default = null)

注:超变量GET的获取方法名为getQuery

 

八、命名空间

在每个模块下的Bootstrap.php文件中规定了改模块对应的命名空间,ZF在实例化相关model类等时会根据class的命名,从响应的命名空间所对应的basepath里去取相应的类,所以命名的规则就该明了了。

  protected function _initAutoload() {  

$autoloader=new  Zend_Application_Module_Autoloader

(array(  

 'namespace' => 'default',  

'basePath'=>APPLICATION_PATH.'/modules/default');  

    return $autoloader; 

 } 

 

九、视图相关

如果不想在action执行完毕后不让ZF调用视图,那么直接用exit方法,这个不管是不是在框架内都通用! 可以不需要调用麻烦的。。