Como evitar o erro 404 na instalação de nova extensão

27

É um erro muito comum que aparece no Magento quando você instala uma nova extensão com a configuração system.xml :

Quando você vai para a System->Configuration->Extensionguia, um erro 404 é mostrado. Você precisa sair e fazer login novamente e tudo bem. Mas existe alguma maneira de evitar isso?

JohnyFree
fonte
Acho que não, a árvore da ACL é carregada quando você faz login e armazenada na sessão de usuários.
Peter O'Callaghan
Eu tenho uma ideia, mas não sei se é possível. Você pode alterar o comportamento do "Magento Connect Manage" para expirar todas as sessões de administração após a instalação da extensão. Mas não é possível fazer isso no escopo da extensão (((. Somente no escopo do Connect Manager.
oleksii.svarychevskyi
2
Sua pergunta respondeu à minha pergunta! Obrigado!
Ian Phillips
Eu tive que deixar um comentário, porque, como Ian disse: "Sua pergunta respondeu à minha pergunta". O registro fez o truque!
21715 Hans Hansassass

Respostas:

16

Como o @Cags disse, isso não é (facilmente) possível porque a árvore da ACL é carregada quando a sessão é inicializada (AKA quando o administrador faz login).
Uma solução possível seria substituir o _isSectionAllowedmétodo no controlador de configuração do sistema: ( Mage_Adminhtml_System_ConfigController::_isSectionAllowed) e fazer com que ele recarregasse a árvore da ACL.
Algo como:

protected function _isSectionAllowed($section)
{
    $session = Mage::getSingleton('admin/session');
    $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());//reload the tree
    return parent::_isSectionAllowed($secntion); //all the code from the original method
}

Mas isso significa que a árvore da ACL será recarregada toda vez que você acessar uma seção de configuração. Não vejo sentido em fazer isso.
Além disso, você não pode fazer isso para uma extensão específica. Você precisará reescrever a classe principal.

Marius
fonte
Talvez seja melhor redefinir a árvore da ACL apenas se a seção não for permitida. Sinceramente, nunca me lembro de tentar carregar uma seção que não era permitida pela ACL, exceto após a instalação de um módulo e antes da reinicialização do administrador.
Pspahn 15/09/14
É uma ideia maluca, pois nunca tentei e não tenho certeza se a sessão está disponível neste momento, mas será possível recarregar a partir do script de instalação? Claro que isso só funciona se o script de instalação é desencadeada por um pedido onde você como admin está logado e não vai afetar outros usuários logados backend
Fabian Schmengler
2
@fschmengler. Eu não tentei antes, mas acho que poderia funcionar. Bunt, honestamente, acho que não vale a pena.
Marius
9

Eu encontrei uma maneira de contornar isso com muito pouca personalização. O que precisamos é:

  1. Uma nova ação do controlador que recarrega a ACL (sem fazer logoff e logon) e depois redireciona de volta para a página anterior:

    class SSE_AclReload_Adminhtml_Permissions_AclReloadController extends Mage_Adminhtml_Controller_Action
    {
        public function indexAction()
        {
            $session = Mage::getSingleton('admin/session');
            $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('ACL reloaded'));
            $this->_redirectReferer();
        }
    }
  2. Uma atualização de layout para o admin_norouteidentificador. Adicionaremos um link para essa nova ação do controlador diretamente na página do administrador 404:

    <layout version="0.1.0">
        <adminhtml_noroute>
            <reference name="content">
                <block type="adminhtml/template" name="content.aclReload" after="content.noRoute" template="sse_aclreload/button.phtml" />
            </reference>
        </adminhtml_noroute>
    </layout>
  3. E o modelo com o link:

    <a href="<?php echo $this->getUrl('adminhtml/permissions_aclReload/index'); ?>">
        <?php echo $this->__('Reload ACL'); ?>
    </a>

Juntei -o em uma pequena extensão no Github: SSE_AclReload (adiciona o link também ao menu Sistema> Permissões )

Você também pode tentar recarregar a ACL automaticamente assim que a ação admin / noroute for despachada, mas eu prefiro 1) saber o que está acontecendo e 2) ter uma escolha.

Fabian Schmengler
fonte
1

Se você tiver algum problema ao instalar uma nova extensão e obter a página de erro 404 , apenas uma coisa que você precisa fazer é entrar System > Permissions > Roles. Apenas salve a função e não esqueça de limpar var/cachee var/seesion seu problema foi resolvido.

Hiral Unadkat
fonte
"limpar var / sessão"? Para desconectar todos os clientes e esvaziar seus carrinhos? Não.
Fabian Schmengler
nupcial, apenas limpar a sessão, na pasta var
Hiral Unadkat
Infelizmente isso é o mesmo. Exceto se você não usar o manipulador de sessões de arquivo. Nesse caso, ele não faz nada porque não há arquivos
Fabian Schmengler
Então você precisa fazer é acessar Sistema> Permissões> Funções e salvar a função.
Hiral Unadkat
O que nos leva ao outro problema com a sua resposta: mesmo que funcione, é mais esforço do que fazer logoff e logon novamente, que o OP deseja evitar.
Fabian Schmengler
0

Tente o seguinte:

  1. Vá para Admin -> Sistema -> Gerenciamento de cache
  2. Selecione todo o tipo de cache
  3. Mantenha a ação como Atualizar e clique em Enviar.
shefali singh
fonte