Настраиваемый контроллер учетной записи вызывает 404 на адресной книге - PullRequest
1 голос
/ 09 июня 2011

Я столкнулся с проблемой в наших установках Magento, которую мне было очень трудно отследить.Каждый раз, когда клиент переходит на страницу «Моя учетная запись» и щелкает ссылку «Адресная книга», он отправляет его на страницу 404 CMS по умолчанию.Я искал в Google и нашел несколько похожих проблем, но они не были такими же.Тем не менее, одним из предложенных решений было то, что причиной был пользовательский модуль перенаправления входа.

Так что я начал отключать все наши пользовательские модули один за другим, чтобы посмотреть, решит ли это проблему, и оказалось, чтоОтключение нашего пользовательского контроллера учетных записей устраняет проблему.Я попытался отследить это дальше, используя Mage :: log () в переопределенных методах, чтобы узнать, вызывались ли они при попытке доступа к / customer / address /, но в журналах ничего не показывалось.

Единственное, что я оставил, - это проблема с конфигурацией моего контроллера.Это config.xml, который я настроил:

<?xml version="1.0"?>
<config>
    <modules>
        <mymodule_login>
            <version>0.1.0</version>
        </mymodule_login>
    </modules>
<frontend>
   <routers>
      <mymodule_login>
         <use>standard</use>
         <args>
             <module>MyModule_Login</module>
             <frontName>customer</frontName>
         </args>
      </mymodule_login>
   </routers>
</frontend>
<global>
  <rewrite>
    <mymodule_login>
      <from><![CDATA[#^/account/#]]></from>
      <to>/customer/account/</to>
    </mymodule_login>
  </rewrite>
<blocks>
<customer>
    <rewrite>
        <register-login>MyModule_Login_Block_View</register-login>
    </rewrite>
    </customer>
    <login>
        <class>RegisterLogin</class>
    </login>
  </blocks>
</global>
</config>

Я думаю, что это может быть проблема с перезаписью из # ^ / account / # в / customer / account /, но я не знаюдостаточно переписать Magento, чтобы определить, верно это или нет.Методы, которые я перезаписал: loginPostAction, _loginPostRedirect и _welcomeCustomer.

Ответы [ 2 ]

0 голосов
/ 14 марта 2016

Мне пришлось переопределить Mage_Customer_AccountController, однако вы не можете просто переопределить только один контроллер, вам нужно переопределить весь модуль.

Так вот как вы решаете в этой ситуации. Вы создаете файлы, которые ссылаются на родителя.

ПРИМЕЧАНИЕ. Замените {Namespace} вашим собственным пространством имен.

Вот мой config.xml: (внутри папки app / code / local / {Namespace} / Customer / etc)

<?xml version="1.0"?>
<config>
    <modules>
        <{Namespace}_Customer>
            <version>0.1.0</version>
        </{Namespace}_Customer>
    </modules>
    <frontend>
        <routers>
            <customer>
                <use>standard</use>
                <args>
                    <module before="Mage_Customer">{Namespace}_Customer</module>
                    <frontName>customer</frontName>
                </args>
            </customer>
        </routers>
    </frontend>
</config>

Теперь переопределяем Mage_Customer_AccountController: (внутри папки app / code / local / {Namespace} / Customer / controllers)

<?php

require_once ('Mage/Customer/controllers/AccountController.php');

class {Namespace}_Customer_AccountController extends Mage_Customer_AccountController
{
protected function _loginPostRedirect()
    {

        $session = $this->_getSession();

        if($session->getBeforeAuthUrl() == Mage::getUrl('checkout/onepage/index')){
            $session->setBeforeAuthUrl(Mage::getUrl('checkout/cart'));
            $this->_redirectUrl($session->getBeforeAuthUrl(true));
            return;
        }
        return parent::_loginPostRedirect();

    }
}

Это перенаправляет клиента обратно на его страницу корзины после того, как он войдет в систему через кассу. Мы сделали это, потому что если в их корзине есть товар из предыдущего сеанса, Magento объединит последние товары в корзине с предметами из предыдущего сеанса и перейдет к оплате, не сообщая клиенту. Поэтому, чтобы избежать жалоб клиентов, мы просто перенаправляем обратно в корзину, чтобы клиент мог видеть, что это происходит.

Теперь, поскольку мы переопределяем весь модуль, мы должны создать вышеупомянутые файлы, которые ссылаются на родительский. Два других контроллера в Mage_Customer - это Mage_Customer_AddressController и Mage_Customer_ReviewController. Ваш экземпляр Magento может меняться в зависимости от версии, поэтому убедитесь, что вы проверили родительскую папку, расположенную по адресу (app / code / core / Mage / Customer / controllers) и НИКОГДА НЕ ПРЯМО РЕДАКТИРОВАТЬ CORE!

Здесь мы ссылаемся на родительский элемент для Mage_Customer_AddressController: (внутри папки app / code / local / {Namespace} / Customer / controllers)

<?php

require_once ('Mage/Customer/controllers/AddressController.php');

class {Namespace}_Customer_AddressController extends Mage_Customer_AddressController
{
}

Аналогично для Mage_Customer_ReviewController: (то же расположение файла)

<?php

require_once ('Mage/Customer/controllers/ReviewController.php');

class {Namespace}_Customer_ReviewController extends Mage_Customer_ReviewController
{
}

Без этих файлов Magento просто не может найти контроллеры и выбрасывает 404.

Наконец, создайте файл в app / etc / modules с именем {Namespace} _Customer.xml, чтобы включить переопределение, и адресная книга не должна больше 404.

0 голосов
/ 10 июня 2011

Дик Лоран был прав - это была моя конфигурация. Все, что я сделал, это добавил второй контроллер, который переопределил Mage_Customer_AddressController, и теперь он работает нормально. Проблема заключалась в том, что мое имя внешнего интерфейса было «customer», поэтому он ожидал найти соответствующий контроллер в моем пользовательском модуле для перехода по URL-адресу /customer/address/.

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