首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

controllers的用法技巧

controllers我们经常要用到的是 继承 如:
复制PHP内容到剪贴板
PHP代码:
class IndexController extends Zend_Controller_Action{
public function 
init()
{
}

}


可如果有大量的controllers,而里面的好多ACION是可以共同的。那如何办呢

看下面的,先定义一个controllers
复制PHP内容到剪贴板
PHP代码:
abstract class BaseController extends Zend_Controller_Action
{
public  
$views;
private 
$groupid;
/**
  * 构造函数
  */
public function __construct() 
{
  
/**
   * 定义views和模板路径
  */
  
$this->views Zend_Registry::get('views');
  
$this->views->template_dir 'view/admin';
  
parent::__construct($this->getFrontController()->getRequest(),$this->getFrontController()->getResponse());
  
/*适配器*/
     
$auth Zend_Auth::getInstance();
     if (
$auth->hasIdentity()) {
                
$Mallec $auth->getStorage()->read();
                if (
$Mallec['adminid']!=1){
                   
$this->adminmsg('rank_no');
                   exit;
                }else {
                 
$this->groupid $Mallec['groupid'];
                 
$this->views->assign('Mallec',$Mallec);
                 
$this->views->assign('webdir',$this->_request->getBaseUrl());//路径
                
}
        }else {
         
$this->adminmsg('login_no','Login');
          exit;
        }
}

/*后台提示信息*/
public function adminmsg($msg,$jumpurl='',$t=2){
  if(
$jumpurl!=''){
   
$basename $this->_request->getBaseUrl().'/admin/'.$jumpurl;
   
$ifjump="<META HTTP-EQUIV='Refresh' CONTENT='$t; URL=$basename'>";
  }else {
   
$basename$_SERVER['HTTP_REFERER'];
  }
  
//语言包
  
$lang Zend_Registry::get('ADMIN_LANG');
  
$lang[$msg] && $msg $lang[$msg];
  
$this->views->assign('basename',$basename);
  
$this->views->assign('msg',$msg);
  
$this->views->assign('ifjump',$ifjump);
  
$this->views->display('message.htm');
}

/**
  * 权限判断,传$info参数,判断是否有该值。
  *
  * @param 权限参数 $info
  */
public function rank($info)
{
  if (isset(
$this->groupid)) {
   
//从数据库中读取权限
    
$table  = new Rank();
    
$rowset $table->fetchRow("group_id = '$this->groupid'");
    if (!
eregi($info,$rowset->rank_list)) {
     
$this->adminmsg('rank_no');
     exit;
    }
  } else {
       
$this->adminmsg('rank_no');
  }
}


public function 
__call($methodName$args)
{
   
$this->_redirect('admin/');
}
}


那么别的地方就可以那样了
继承那控制器
复制PHP内容到剪贴板
PHP代码:

<?php
/**
* MALLEC
* 后台商品品牌控制器
* ============================================================================
* 版权所有 (C) 2007-2008 mallec.cn,并保留所有权利。
* 网站地址: [url=http://www.mallec.cn]http://www.mallec.cn[/url]
* ----------------------------------------------------------------------------
* 这是一个免费开源的软件;这意味着您可以在不用于商业目的的前提下对程序代码
* 进行修改、使用和再发布。
* ============================================================================
* @author:     xgwork@小亿                 <[email=xgwork@163.com]xgwork@163.com[/email]>
* @version:    v1.0
* ---------------------------------------------
* $Author: xgwork@小亿  $
* $Date: 2007-4-11
* $Id: BrandController.php
*/
class admin_BrandController extends BaseController
{
private 
$brand;

public function 
init()
{
  
$this->brand = new Brand();
}

public function 
indexAction()

  
/**
   * 权限判断
   */
  
$this->rank('brand_index');
  
  
/**
   * 读取商品品牌数据
   */
   
$brand $this->brand->brandlist();
  
$this->views->assign('brand'$brand);
  
$this->views->display('brand_list.htm');
}
public function 
gotoAction()
{
  
/**
   * 权限判断
   */
  
$this->rank('brand_save');
  
  
/**
   * 调用编辑和添加共用的页面
   * act == edit,add
   */
  
$act $this->_getParam('act');
  
$id  = (int)$this->_getParam('id');
  
/**
    * 取得编辑品牌数据
   */
  
if ($id !=0) {
  
$brand $this->brand->oneview($id);
  
$this->views->assign('brand',$brand);
  
$this->views->assign('id'$id);
  }
  
$this->views->assign('act',$act);
  
$this->views->display('brand.htm');
  exit;
}
/**
  * 保存数据
  *
  */
public function saveAction()
{
  
/**
   * 权限判断
   */
  
$this->rank('brand_save');
  
$result false;
  
$result $this->brand->save();
  if (
$result) {
   
$this->views->clear_cache(null,'brand|list');//清除品牌缓存集合
      
$this->adminmsg('save_ok','Brand');
   return;
  } else  {
   
$this->adminmsg('save_no');
   return;
  }
}
/**
  * 删除数据
  */
public function delAction()
{
  
/**
   * 权限判断
   */
  
$this->rank('brand_del');
  
$id  = (int)$this->_getParam('id');
  
$result false;
  
$result $this->brand->del($id);
  if (
$result) {
   
$this->views->clear_cache(null,'brand|list');//清除品牌缓存集合
   
$this->adminmsg('del_ok','Brand');
   return;
  } else {
   
$this->adminmsg('del_no');
   return;
  }
}
}


昵称: xgwork  时间: 2007-08-19 23:34:00
;P 不错 我最近也这么用
昵称: edwardhey  时间: 2007-08-20 07:02:00
呵呵,这个那个fleaphp里面的一个实例是一样的哦!:)
昵称: lynncau  时间: 2007-08-20 14:01:00

如果没有这个继承,
手头项目都无法继续了.....

而且继承中可以重构Zend_Controller_Action一些函数,可以方便很多事情....
昵称: qqinxl  时间: 2007-08-20 22:41:00