Zend framework框架开发配置以及目录结构详解

   项目搭建配置搭建好之后现在可以对其进行开发工作,在开发之前,首先得了解目录结构的作用:

第一是数据库得配置文件:application.ini

在文件中需要加入如下代码:

[mysql]
db.adapter=PDO_MYSQL
db.params.host=localhost     //端口
db.params.username=root   //用户名
db.params.password=root  //密码
db.params.dbname=testzf  //数据库名称
然后还需要在Bootstrap.php这个文件中添加如下代码:


class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    function __construct($app){
    	parent::__construct($app);
    	//初始化我们的数据库适配器
		 $url=constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini';
		 $dbconfig=new  Zend_Config_Ini($url,"mysql");
		 $db=Zend_Db::factory($dbconfig->db);
		 $db->query('SET  NAMES  UTF8');
		 Zend_Db_Table::setDefaultAdapter($db);
    }

}
但是这样配置是很不正确的,因为这是入口文件,会频繁操作数据库,对数据库的压力很大。所以一般改成这样配置:在controllers文件夹下新建一个BaseController.php

里面的代码如下:

<?php
/*
*@author FTS
*@copyright(c) 2014
* 做一个父类,专门供其他controller类来继承
*/
class BaseController extends Zend_Controller_Action {
	public function init(){
		//初始化我们的数据库适配器
		 $url=constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini';
		 $dbconfig=new  Zend_Config_Ini($url,"mysql");
		 $db=Zend_Db::factory($dbconfig->db);
		 $db->query('SET  NAMES  UTF8');
		 Zend_Db_Table::setDefaultAdapter($db);
	}
}
?>

这样在其他类中需要操作数据的的就继承此类:

<?php

require_once APPLICATION_PATH.'/models/Message.php';
require_once 'BaseController.php';

class IndexController extends BaseController
{
    public function indexAction()
    {
        // action body
        //到数据中查询
        $messageModel=new Message();
        $res=$messageModel->fetchAll()->toArray();
        //把拿到的数据分配给下一个视图
        $this->view->res=$res;
        
        $this->render('index');
    }
}
这样就节省了数据库的开销。

接下来是模型的作用:

<?php
//这个类是和数据库中某张表对应,通过Message对象实例可以完成
//对表的CRUD操作
class Message extends Zend_Db_Table{
   	protected $_name='message';        //对应是数据库中哪张表
   	protected $_primary='message_id'; //对应数据库中主键字段
   	
   }
?>
<?php
/**可以再此类中进行对数据库的操作,但是不能实现跳转页面的控制,因为这个功能主要是controllers包中控制器控制的
*@author FTS
*@copyright(c) 2014
 */
 class MyCart extends Zend_Db_Table {
	protected $_name='mycart';
	protected $_primary='id';
	var $total_price=0;
	//添加商品到购物车
	function addProduct($userId,$productId,$nums=1){
		
		$res=$this->fetchAll("userid=$userId AND bookid=$productId")->toArray();
		
		if(count($res)>0){
			$old_nums=$res[0]['nums'];
			$data=array(
			    'nums'=>$old_nums+1
			);
			$where="userid=$userId AND bookid=$productId";
			$this->update($data,$where);
			return true;
		}else{		
		$today=time();
		$data=array(
		    'userid'=>$userId,
		    'bookid'=>$productId,
		    'nums'=>$nums,
		    'cartDate'=>$today
		);
		if($this->insert($data)>0){
			return true;
		}else{
			return false;
		}
	  }
	}
}
?>
下面是控制器controllers的简答分析:

<?php

require_once APPLICATION_PATH.'/models/Message.php';
require_once 'BaseController.php';

class IndexController extends BaseController
{
    public function indexAction()
    {
        // action body
        //到数据中查询
        $messageModel=new Message();
        $res=$messageModel->fetchAll()->toArray();
        //把拿到的数据分配给下一个视图
        $this->view->res=$res;
        
        $this->render('index');
    }
}
      IndexController是程序的入口文件。进来过后程序会自动找到views->scripts下的index的文件文件夹,文件下
下面会有index.phtml的一个文件,底层其实程序是通过通过反射机制来找到相对应的文件的。其中控制跳转到那个
页面:主要用到时$this->render('');$this->_forwork();$this->_redirect().这几个控制的,其中render(),是直接
找到本控制器下的某某文件,forward是可以需找到另一个控制器下的对应文件,redirect()可以找到跳转到另外一
个项目的具体地址,范围更大。具体的方法应用请自行查看API开发文档
        




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值