从Zend Framework中的现有控制器类扩展控制器

时间:2011-12-28 17:59:04

标签: php zend-framework zend-autoloader

早上好,我有经典的应用程序,我想从UserController扩展ArticleController,但是当我尝试时

class ArticleController extends UserController
{
    // ...
}

class ArticleController extends Application_Controllers_UserController
{

}

我得到致命错误:上课......没找到...... 如何在Zend Framework中扩展一个控制器?

2 个答案:

答案 0 :(得分:4)

控制器类名称的自动加载不是您在应用程序中可以访问的内容,或者除了在这种情况下有其他需要之外。

您需要手动包含/要求包含您希望扩展的控制器的文件。

<?php
require_once 'UserController.php'; // no adjustment to this path should be necessary

class ArticleController extends UserController
{
    // ...
}

请注意,您的视图脚本仍将通过views / scripts / article而不是views / scripts / user提供。如有必要,您可以在每个操作中调整视图路径。

如评论中所述,您不必更改require_once语句的路径,但可以根据需要进行更改(例如require_once APPLICATION_PATH . '/modules/test/controllers/UserController.php';

答案 1 :(得分:1)

您必须先正确启动自动加载器,然后才能在Bootstrap中进行此类操作。特别是当您在Zend中扩展标准控制器中的控制器时。

$namespace = 'Application';
$basePath = APPLICATION_PATH;
$autoloader = new Zend_Loader_Autoloader_Resource(array('namespace' => $namespace, 'basePath' => $basePath));
$autoloader->addResourceTypes(array('type' => 'controllers', 'path' => '/controllers', 'namespace' => 'Controller'));

现在您可以通过Application_Controller_ [YourControllerName]访问它。

如果您有模块化应用程序,您可以将“应用程序”替换为您的模块名称,或者将其留空。