Расширение маршрута администратора Magento, в результате 404 - PullRequest
0 голосов
/ 09 февраля 2012

В настоящее время я занимаюсь изучением и разработкой для magento, и у меня есть кое-что, работающее для внешнего интерфейса, но сейчас я сейчас пытаюсь заставить его работать для бэкэнда, и я сталкиваюсь с проблемой.Согласно документации и Google, все должно быть просто, но я все еще получаю 404-е.

Я создал стандартную файловую структуру, которая выглядит следующим образом:

app
  code
    local
      Mediafunction
        Csvengine
          Block
          controllers
            Adminhtml  
              IndexController.php
          etc
            config.xml
          Helper
            Data.php
          Model
          sql

Я добавил в config.xml некоторые вещи, чтобы получить ссылку на модуль, показанный в меню, которыйна самом деле работает, но когда я нажимаю на ссылку (которая разрешает / admin / csvengine / index / key / foobar, как и положено), я просто получаю 404.

Я пробовал разные вещи, но я продолжалвозвращаясь к:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Mediafunction_Csvengine before="Mage_Adminhtml">Mediafunction_Csvengine_Adminhtml</Mediafunction_Csvengine>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

, который в настоящее время не работает (404).Мой IndexController.php чрезвычайно прост, и его единственное содержимое:

<?php
class Mediafunction_Csvengine_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
}

Изменение имени класса также не имеет никакого эффекта, и я действительно не знаю, что я делаю неправильно.Как я могу заставить это работать?

1 Ответ

6 голосов
/ 09 февраля 2012

Вам нужно решить две простые проблемы: -)

Первый: капитализация. Каждый файл и каталог модуля (кроме controllers, etc/*, data/* и sql/* должны быть написаны заглавными буквами для чувствительных к регистру файловых систем. Причиной этого является сочетание как прямой реализации, так и способа, которым Varien_Autoload находит определения классов на основе имен классов (хотя первое относится к классам контроллера действий). Это просто означает, что ваш модуль должен быть Csvengine, а не csvengine, и вы должны реализовать это в именах файлов, а также в узле объявления модуля modules/Mediafunction_Csvengine.

Второе: ваш подход к adminhtml-контроллеру почти правильный. Исходя из вашего имени класса, вам нужно иметь папку под controllers с именем Adminhtml. Вам также необходимо обновить значение на admin/routers/adminhtml/args/modules/Mediafunction_csvengine до Mediafunction_Csvengine, так как оно будет использоваться вместе с пулом кода модуля для поиска каталога вашего контроллера действий. См. Mage_Core_Controller_Varien_Router_Standard::collectRoutes() для логики config-to-directory.


EDIT

Я забыл указать на проблему с вашим маршрутом (admin / csvengine / index) и именем вашего контроллера. В стандартном сопоставлении маршрута с контроллером URL-адреса Magento имеют пять областей:

http://site.com/thisisparttwo/thisispartthree/thisispartfour/foo/1/bar/2/
Base URL       |front name   |controller path|method        | params...

Ваш путь к контроллеру указывает на класс CsvengineController под именем администратора. Вы настроили каталог контроллеров (с моими изменениями) на Mediafunction/Csvengine/controllers/Adminhtml/, поэтому вам понадобится CsvengineController.php, который содержит класс с именем Mediafunction_Csvengine_Adminhtml_CsvengineController

Еще одно замечание: ACL администрирования Magento работает по методу Mage_Adminhtml_Controller_Action::_isallowed() - без переопределения этого в вашем контроллере доступ к маршруту неограничен для всех пользователей-администраторов.

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