Расширение контроллера из существующего класса контроллера в Zend Framework - PullRequest
4 голосов
/ 28 декабря 2011

Доброе утро, у меня есть классическое приложение, и я хотел бы расширить ArticleController от UserController, но когда я пытаюсь

class ArticleController extends UserController
{
    // ...
}

или

class ArticleController extends Application_Controllers_UserController
{

}

, я получаю фатальную ошибку:класс ... не найден ... Как я могу расширить один контроллер от другого в Zend Framework?

Ответы [ 2 ]

4 голосов
/ 28 декабря 2011

Автозагрузка имен классов контроллеров - это не то, к чему у вас есть доступ в вашем приложении, или в чем есть большая потребность, кроме как в случае, подобном этому.

Вам нужно будет вручную включить / запросить файл, содержащий контроллер, который вы хотите расширить.

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

class ArticleController extends UserController
{
    // ...
}

Обратите внимание, что ваши скрипты вида все еще будут обслуживаться из представлений / скриптов / статьи, а не из представлений / скриптов / пользователей. При необходимости вы можете настроить путь просмотра в каждом действии.

Как указано в комментарии, вам не нужно менять путь к оператору require_once, но вы можете изменить его по мере необходимости (например, require_once APPLICATION_PATH . '/modules/test/controllers/UserController.php';)

1 голос
/ 06 августа 2012

Вы должны правильно запустить автозагрузчик, прежде чем вы сможете сделать это, например, в 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].

Если у вас есть модульное приложение, вы всегда можете заменить «Приложение» на имя вашего модуля или просто оставить его пустым.

...