【问题标题】:extend controller in zend Controller在zend控制器中扩展控制器
【发布时间】:2010-11-24 11:39:19
【问题描述】:

嗨 如何从模块内的另一个控制器类扩展控制器类? 例如:我有一个模块默认值和一个控制器 defaultController 我想扩展用户模块中的 userController 中的默认控制器? 尝试执行此操作时遇到致命错误

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    对于可重用的控制器功能,您应该为两个控制器使用公共父类,而不是通过另一个控制器扩展一个控制器,或者您应该使用动作助手。

    【讨论】:

    • 常用功能在默认控制器中,在模块默认中。我想在所有其他模块控制器中获取这些默认控制器。我尝试使用动作助手,但我无法在动作助手中获取 Zend_Controller_Request_Abstract 对象。
    • 我正在尝试实现stackoverflow.com/questions/583636/… 中描述的解决方案。但我有一个模块化结构......所以在给定的链接中提到我在默认模块中有一个基本控制器,它不能能够扩展到其他控制器。这种情况有更好的解决方案吗?
    • @guny 我只能重复一遍:通用功能不应该在可请求的控制器中。顺便说一句,在您的个人库中实现一个通用父控制器类要容易得多;)
    • 实际上我是zend框架的新手,我已经了解了动作助手,库中的插件,但是如何在里面添加父控制器类?
    【解决方案2】:

    试试看这个例子

    我的目录敲击

    +应用
    +-配置
    +-模块
    +--正面
    +---控制器
    +---观看次数
    +----帮手
    +----脚本
    +-----索引
    +--用户
    +---控制器
    +---观看次数
    +----帮手
    +----脚本
    +-----索引
    +图书馆
    +公开

    application/configs/application.ini

    [production]
    Autoloadernamespaces[] = "Zend_"
    Autoloadernamespaces[] = "My_"
    
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    
    bootstrap.class = "Bootstrap"
    appnamespace = "Application"
    
    resources.modules[] = ''
    resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
    resources.frontController.moduleControllerDirectoryName = "controllers"
    resources.frontController.defaultModule = "front"
    resources.frontController.throwErrors = false
    
    resources.router.routes.default.route = ":module/:controller/:action/*"
    resources.router.routes.default.defaults.module = front
    resources.router.routes.default.defaults.controller = index
    resources.router.routes.default.defaults.action = index
    
    [staging : production]
    
    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    
    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.frontController.params.displayExceptions = 1
    

    application/bootstrap.php

    <?php
    
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    
    
    }
    

    application/modules/front/controllers/IndexController.php

    <?php
    /**
     * IndexController
     * 
     * @author
     * @version 
     */
    require_once 'Zend/Controller/Action.php';
    class IndexController extends My_Controller_Action_Abstract
    {
        /**
         * The default action - show the home page
         */
        public function indexAction ()
        {
            echo('Front Controller');
        }
    }
    

    application/modules/user/controllers/IndexController.php

    <?php
    /**
     * IndexController
     * 
     * @author
     * @version 
     */
    require_once 'Zend/Controller/Action.php';
    class User_IndexController extends My_Controller_Action_Abstract
    {
        /**
         * The default action - show the home page
         */
        public function indexAction ()
        {
            echo('User Controller');
        }
    }
    

    【讨论】:

    • 我的用户类 class User_IndexController extends Default_IndexController { public function init() { /* 在此处初始化动作控制器 */ } public function indexAction() { // 动作主体 // if ($this->getRequest ()->isPost()) // { // $this->view->name=$_POST['username']; // } } 类 Default_IndexController 扩展 Zend_Controller_Action {} }
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多