Сопоставления контроллера Zend Framework - PullRequest
0 голосов
/ 20 декабря 2009

Моя структура каталогов настроена следующим образом:

Application Root
|-application
|  |--configs
|  |--controllers
|  |  |--helpers
|  |
|  |--layouts
|  |  |--scripts
|  |
|  |--models
|  |--views
|     |--scripts
|        |--index
|        |--test
|
|--data
|  |--session
|
|--public
|--index.php
|--.htaccess

В моем каталоге контроллеров у меня есть 2 контроллера: IndexController и TestController, которые имеют идентичные внутренние определения, с двумя методами, indexAction и testingAction. Когда я указываю своему браузеру на localhost/application, я получаю результат моего IndexController.indexAction(), но когда я перехожу к localhost/test или localhost/testing или localhost/test или к любому другому варианту, я получаю ошибку 404 Not Found.

Я использую Zend Framework (я верю, что 1.9.6), и я подтвердил, что нет никаких проблем с различными исходными файлами PHP с точки зрения синтаксических ошибок.

Почему я могу видеть это поведение и что я могу сделать, чтобы это исправить?

EDIT:

У меня был другой разработчик, который прислал мне полное приложение на основе Zend для сравнения моей установки. Не было никаких явных различий с точки зрения расположения файлов или содержимого различных файлов конфигурации. Однако и на его сайте я могу получить доступ только к индексной странице сайта, но ни к одному из внутренних контроллеров. У него нет этой проблемы. Возможно, это проблема с моей настройкой Apache?

Ответы [ 4 ]

3 голосов
/ 21 декабря 2009

проверьте свои конфиги Apache. похоже .htaccess mod_rewrite не работает должным образом

ОБНОВЛЕНИЕ 1:

также проверьте:

    <Directory "/Applications/MAMP/htdocs"> # OR WHAT IS IN YOU CONF FILE

   ... SKIP ...
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
        AllowOverride All

   ... SKIP ...
    </Directory>

для опции AllowOverride All. без него .htaccess файлы не работают

1 голос
/ 20 декабря 2009
  1. Вы должны указать localhost / public, а не localhost / application.
  2. ZF использовал «index» в качестве контроллера по умолчанию и имени действия. Поэтому, когда вы попытаетесь использовать localhost / public, он найдет localhost/public/index/index, в результате получится indexController.indexAction. Когда вы указали на localhost/test, он найдет localhost/test/index, а localhost/testing приведет к localhost/testing/index.

Итак, вы должны попробовать localhost/test/testing.

0 голосов
/ 20 декабря 2009

у вас должно быть indexAction в TestController для работы с URL, например localhost/test

0 голосов
/ 20 декабря 2009

Ваш браузер должен указывать на localhost/public, который должен содержать файл .htacess и index.php. Если вы используете запущенное приложение в качестве основы, конфигурация .htaccess должна быть настроена так, чтобы все запросы, которые привели бы к 404, в конечном итоге были переданы в index.php, который затем, в свою очередь, запускает приложение, загружая соответствующие контроллеры. .

EDIT
У вас также есть функции немного неправильно (я думаю). Если вы перейдете на localhost/test, он должен вызвать действие index в тестовом контроллере (если вы не определили другое действие по умолчанию в конфигурации).

Итак, если у вас есть действие с именем test в тестовом контроллере, вы хотите получить доступ к:

локальный / государственный / тест / тест /

Помогает, если вы настроите контроллер ошибок, так как это значительно упрощает отладку. Например, когда я пытаюсь получить доступ к несуществующему действию, я получаю это (в режиме разработки):

Сообщение: действие "index" не существует и не было перехвачено в __call ()

Трассировка стека:
...

Параметры запроса:

массив 'controller' => string 'mod' (длина = 3)
'action' => string 'index' (length = 5)
'module' => string 'default' (length = 7)

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