새 확장 설치에서 404 오류를 피하는 방법


27

system.xml 구성으로 새 확장을 설치할 때 Magento에 표시되는 매우 일반적인 오류입니다 .

System->Configuration->Extension탭으로 이동 하면 404 오류가 표시됩니다. 로그 아웃했다가 다시 로그인해야합니다. 그러나 이것을 피할 수있는 방법이 있습니까?


믿지 않습니다. ACL 트리는 사용자 세션에 로그인하여 저장할 때로드됩니다.
Peter O'Callaghan

한 가지 아이디어가 있지만 가능한지 모르겠습니다. 확장 기능을 설치 한 후 "Magento Connect Manage"의 동작을 변경하여 모든 관리자 세션을 만료시킬 수 있습니다. 그러나 그 수는 없습니다 (((확장의 범위에서 수행에만 연결 관리자의 범위에서..
oleksii.svarychevskyi

2
귀하의 질문은 내 질문에 대답했습니다! 감사!
Ian Phillips

이안이 "당신의 질문이 내 질문에 대답했습니다"라고 말한 것처럼 나는 의견을 남겨야했습니다. 로깅은 트릭을했다!
Hans Wassink

답변:


16

@Cags가 말했듯이 세션이 초기화 될 때 (관리자가 로그인 할 때 AKA) ACL 트리가로드되기 때문에 (쉽게) 가능하지 않습니다.
가능한 해결 _isSectionAllowed방법은 시스템 구성 제어기 (( Mage_Adminhtml_System_ConfigController::_isSectionAllowed)) 에서 메소드 를 대체 하고 ACL 트리를 다시로드하는 것입니다.
다음과 같은 것 :

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
}

그러나 이는 구성 섹션에 액세스 할 때마다 ACL 트리가 다시로드됨을 의미합니다. 나는 이것을하는 데 아무런 의미가 없다.
또한 하나의 특정 확장에 대해서는 그렇게 할 수 없습니다. 핵심 클래스를 다시 작성해야합니다.


섹션이 허용되지 않으면 ACL 트리 만 재설정하는 것이 좋습니다. 솔직히 모듈 설치 후와 관리자가 다시 로그하기 전에 ACL이 허용하지 않은 섹션을로드하려고 시도한 것을 기억할 수 없습니다.
pspahn

시도하지 않았기 때문에 미친 아이디어입니다.이 시점에서 세션을 사용할 수 있는지 확실하지 않지만 설치 스크립트에서 다시로드 할 수 있습니까? 물론 이것은 관리자로 로그인 한 요청에 의해 설치 스크립트가 트리거되고 다른 로그인 한 백엔드 사용자에게 영향을 미치지 않는 경우에만 작동합니다.
Fabian Schmengler

2
@fschmengler. 나는 전에 그것을 시도하지 않았지만 그것이 효과가 있다고 생각합니다. 솔직히 말해서 난 그만한 가치가 있다고 생각하지 않습니다.
Marius

9

나는 거의 사용자 정의하지 않고이 문제를 해결할 방법을 찾았습니다. 우리가 필요한 것은 :

  1. ACL을 다시로드하고 (로그 아웃 및 로그인하지 않은) 새로운 컨트롤러 작업은 이전 페이지로 다시 리디렉션됩니다.

    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. admin_noroute핸들 의 레이아웃 업데이트 . 이 새 컨트롤러 작업에 대한 링크를 관리자 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. 링크가있는 템플릿 :

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

Github에서 SSE_AclReload 의 작은 확장으로 함께 던졌습니다 ( 시스템> 권한 메뉴 에도 링크를 추가 합니다)

admin / noroute 조치가 전달되 자마자 ACL을 자동으로 다시로드하려고 시도 할 수도 있지만 1) 진행중인 작업을 알고 2) 선택할 수있는 것을 선호합니다.


1

새 확장 프로그램을 설치할 때 문제가 발생하면 404 오류 페이지가 표시되면 한 가지만 수행하면됩니다 System > Permissions > Roles. 그냥 역할을 저장하고 삭제하는 것을 잊지 마세요 var/cachevar/seesion 그리고 문제가 해결되었습니다.


"일반 var / 세션"? 모든 고객을 로그 아웃하고 장바구니를 비우려면? 아니.
Fabian Schmengler 2016 년

nup, var 폴더에서 세션을 지우십시오
Hiral Unadkat

불행히도 이것은 동일합니다. 파일 세션 핸들러를 사용하지 않는 경우를 제외하고. 이 경우 파일이 없기 때문에 아무 것도 수행하지 않습니다.
Fabian Schmengler

그런 다음 시스템> 권한> 역할로 이동하여 역할을 저장해야합니다.
Hiral Unadkat

그것은 당신의 대답에 대한 다른 문제를 우리에게 가져옵니다.
Fabian Schmengler 2016 년

0

이 시도:

  1. 이동 > 시스템 - -> 캐시 관리 관리자
  2. 모든 캐시 유형을 선택하십시오
  3. 작업을 새로 고침으로 유지하고 제출을 누르십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.