zend framework 框架中自定义父控制器

今天简单的聊聊ZF框架中的控制器。
大家都知道ZF中不可以使用__construct()构造方法,类的初始化操作需要用init()方法完成,
原因大部分朋友都应该了解,在php中,当子类有构造方法时,父类的构造方法不会被调用,
通过阅读zend/controller/Action.php的__construct()可以知道,它通过使用$this->init(),类似注入的方式,避免了这种情况。
那么在一个项目中,若干的controller可能会做一些同样的动作,比如初始化session、实例化一些对象等等,
如果在每个controller的init()中,写一些重复的代码,当controller比较多时,一来比较麻烦,二来不方便后期维护。
怎样解决这个问题呢?可以把这些代码写到一个文件中,然后include(),也可以OOXX,但我不认为这是个好办法,我的方法是,自定义一个父控制器。
例如:在library目录中新建一个Mylib/Controller/Parent.php文件,让这个文件继承zf的Controller,这样写:
class Mylib_Controller_Parent extends Zend_Controller_Action
{
public function init()
{
parent::init();
// Your custom code
}
}
以后在每个项目controller中不要继承ZF的默认控制器了,直接继承我们自己的Parent:
class DefaultController extends Mylib_Controller_Parent
{
public function init()
{
parent::init();
// Your custom code
}
}
就是这么简单。 😉
第一篇关于Zend Framework的文章,没什么技术含量,以后我会把项目中常用到的、实用的ZF经验技巧写下来,谢谢大家支持。

TrackBack: http://mimiz.cn/index.php/php/zend-framework-custom-parent-controller/trackback/
7 Responses to “zend framework 框架中自定义父控制器”
  1. 蓝色铺子 Says:

    不错啊~~又学习了~支持! 😛

  2. 七二 Says:

    不错,我也准备学ZF啦,嘻嘻哈哈.

  3. zong Says:

    ZendFramework-1.10.5 版本.

    访问的时候老是提示找不到父控制器类

  4. MiMi Says:

    请注意父控制器的路径:Mylib/Controller/Parent.php 继承的类名要跟路径完全一致才行。

  5. taycoo Says:

    看了你写的东西,只有感觉,你是大哥啊,要是你在我这里,我当你学生该多好

  6. song Says:

    哥们,真的感谢了…虽然技术含量不高,但是我为这个东西困扰很久了。
    我还是没有把zend的底层原理给搞明白….

  7. 北京装修 Says:

    哈哈,文章不错,收藏了

Leave a Reply !

^_^您敢留下回复吗?