Zend Framework сообщение об ошибке «неверный контроллер» - PullRequest
0 голосов
/ 14 декабря 2009

Когда я загружаю домашнюю страницу сайта ZF, я получаю сообщение «Указан неверный контроллер (ошибка)», где «ошибка» - это имя контроллера.

В моем bootstrap.php у меня есть фрагмент ниже, где я добавил оператор print в catch ():

// Dispatch the request using the front controller. 
try {   
    $frontController->dispatch();
}
catch (Exception $exception) {
    print $exception; exit;
    exit($exception->getMessage());
}

Это распечатывает:

exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in /www/common/ZendFramework/library16/Zend/Controller/Dispatcher/Standard.php:241
Stack trace:
#0 /www/common/ZendFramework/library16/Zend/Controller/Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /www/site.com/htdocs/application/bootstrap.php(38): Zend_Controller_Front->dispatch()
#2 /www/site.com/htdocs/public/index.php(16): require('/www/site....')
#3 {main}

Кто-нибудь может понять, что происходит? У меня есть предчувствие, что это как-то связано с чувствительностью к регистру и соглашениями об именах ZF.

Исходное сообщение "неверный контроллер" приходит из фрагмента ниже

print $request->getControllerName();

        if (!$this->isDispatchable($request)) {
            $controller = $request->getControllerName();
            if (!$this->getParam('useDefaultControllerAlways') && !empty($controller)) {
                require_once 'Zend/Controller/Dispatcher/Exception.php';
                throw new Zend_Controller_Dispatcher_Exception('Invalid controller specified (' . $request->getControllerName() . ')');
            }
            $className = $this->getDefaultControllerClass($request);

        }

Все это выводит на экран «указанный контроллер indexerrorInvalid (ошибка)», поэтому похоже, что он сначала пытается загрузить контроллер индекса, не может, а затем имеет проблему с загрузкой контроллера ошибок.

Может быть, путь к файлам контроллера неправильный?

1 Ответ

1 голос
/ 14 декабря 2009

В вашем случае frontcontroller пытается достичь индекса (домашней страницы) вашего сайта, но он не может достичь его, потому что некоторая ошибка в вашем пути к каталогу контроллера После того, как он не может сделайте так, что есть плагин контроллера с именем "Zend_Controller_Plugin_ErrorHandler" (и этот зарегистрирован по умолчанию), чтобы он перенаправил запрос контроллеру ошибок, который также не найден передним контроллером, чтобы он сказал вам эту ошибку , поэтому проверьте путь к каталогу вашего контроллера Надеюсь, я вам это хорошо объясню :)

Окей,

Следуй за мной: этот код должен быть найден в файле index.php

<code><?php
error_reporting(E_ALL | E_STRICT);

define('APPLICATION_PATH' , realpath(dirname(__FILE__)) .'/../application' );

set_include_path(
    APPLICATION_PATH . '/../library'
    . PATH_SEPARATOR . get_include_path()
);

require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();


try
{
    require '../application/bootstrap.php';
}
catch(Exception $exception)
{
    echo "<html><body> an exception occured while bootstrapping the application";

    if (defined('APPLICATION_ENVIRONMENT') && APPLICATION_ENVIRONMENT != 'production')
    {
        echo "<br/><br/>" . $excepion->getMessage() . "<br/>"
        . "<div align='left'>Stack Trace: "
        . "<pre> " . $exception->getTraceAsString() . "
"; } echo " </ html"; выход (1); } Zend_Controller_Front :: деЫпзЬапс () -> отправка ();

и я думаю, что теперь у вас есть файл с именем «Приложение», «Начальная загрузка» или «Инициализатор» что бы ни называлось, оно должно выглядеть

<?php

defined('APPLICATION_PATH')
    or define('APPLICATION_PATH' , dirname(__FILE__));

defined('APPLICATION_ENVIRONMENT')
    or define('APPLICATION_ENVIRONMENT', 'development');



$frontController = Zend_Controller_Front::getInstance();

$frontController->setControllerDirectory(APPLICATION_PATH . '/controllers');


$frontController->setParam('env' , APPLICATION_ENVIRONMENT);


Zend_Layout::startMvc(APPLICATION_PATH . '/layouts/scripts');


$view = Zend_Layout::getMvcInstance()->getView();
$view->doctype('XHTML1_STRICT');

unset($frontController);

Вы должны дважды проверить эту строку:

  $frontController->setControllerDirectory(APPLICATION_PATH . '/controllers');

устанавливает путь к ControllerDirectory

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...