Cách tránh lỗi 404 khi cài đặt tiện ích mở rộng mới


27

Đây là một lỗi rất phổ biến xuất hiện trong Magento khi bạn cài đặt tiện ích mở rộng mới với cấu hình system.xml :

Khi bạn đi đến System->Configuration->Extensiontab, một lỗi 404 được hiển thị. Bạn cần phải đăng xuất và đăng nhập lại và sau đó là ok. Nhưng có cách nào để tránh điều này?


Tôi không tin như vậy, cây ACL được tải khi bạn đăng nhập và lưu trữ trong phiên người dùng.
Peter O'Callaghan

Tôi có một ý tưởng nhưng tôi không biết nếu có thể. Bạn có thể thay đổi hành vi của "Magento Connect Manage" để hết hạn tất cả các phiên quản trị sau khi tiện ích mở rộng được cài đặt. Nhưng không thể thực hiện được từ phạm vi mở rộng (((Chỉ từ phạm vi của Trình quản lý kết nối.
Oleksii.svarychevskyi

2
Câu hỏi của bạn đã trả lời câu hỏi của tôi! Cảm ơn!
Ian Phillips

Tôi đã phải để lại một bình luận, vì như Ian nói: "Câu hỏi của bạn đã trả lời câu hỏi của tôi". Đăng nhập đã lừa!
Hans Wassink 11/03/2015

Câu trả lời:


16

Như @Cags đã nói, điều này không (dễ dàng) có thể vì cây ACL được tải khi phiên được khởi tạo (AKA khi quản trị viên đăng nhập).
Một cách giải quyết khác có thể là ghi đè _isSectionAllowedphương thức trong bộ điều khiển cấu hình hệ thống: ( Mage_Adminhtml_System_ConfigController::_isSectionAllowed) và làm cho nó tải lại cây ACL.
Cái gì đó như:

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
}

Nhưng điều này có nghĩa là cây ACL sẽ được tải lại mỗi khi bạn truy cập vào phần cấu hình. Tôi thấy không có điểm nào trong việc này.
Ngoài ra, bạn không thể làm điều đó cho một phần mở rộng cụ thể. Bạn sẽ phải viết lại lớp lõi.


Có lẽ sẽ tốt hơn nếu chỉ đặt lại cây ACL nếu phần đó không được phép. Thành thật tôi không bao giờ có thể nhớ lại việc cố gắng tải một phần không được ACL cho phép ngoài việc cài đặt mô-đun và trước khi quản trị viên đăng nhập lại.
pspahn

Chỉ là một ý tưởng điên rồ vì tôi chưa bao giờ thử nó và tôi không chắc liệu phiên này có sẵn vào thời điểm này không, nhưng liệu có thể tải lại từ tập lệnh cài đặt không? Tất nhiên, điều này chỉ hoạt động nếu tập lệnh cài đặt được kích hoạt bởi một yêu cầu mà bạn là quản trị viên đã đăng nhập và nó sẽ không ảnh hưởng đến những người dùng đăng nhập khác
Fabian Schmengler

2
@fschmengler. Tôi chưa từng thử nó trước đây, nhưng tôi nghĩ nó có thể hoạt động. Thành thật mà nói tôi không nghĩ nó đáng để gặp rắc rối.
Marius

9

Tôi tìm thấy một cách xung quanh này với rất ít tùy chỉnh. Những gì chúng ta cần là:

  1. Một hành động điều khiển mới tải lại ACL (không đăng xuất và đăng nhập), sau đó chuyển hướng quay lại trang trước:

    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. Một bản cập nhật bố trí cho admin_noroutetay cầm. Chúng tôi sẽ thêm một liên kết đến hành động điều khiển mới này trực tiếp trên trang quản trị 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. Và mẫu có liên kết:

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

Tôi đã ném nó vào một phần mở rộng nhỏ trên Github: SSE_AclReload (cũng thêm liên kết vào menu System> Rights )

Bạn cũng có thể thử tải lại ACL tự động ngay sau khi hành động quản trị / noroute được gửi đi, nhưng tôi thích 1) biết điều gì đang xảy ra và 2) có lựa chọn.


1

Nếu bạn có bất kỳ vấn đề gì khi bạn cài đặt tiện ích mở rộng mới và nhận trang lỗi 404 thì chỉ có một điều bạn cần làm là đi vào System > Permissions > Roles. Chỉ cần lưu vai trò và đừng quên xóa var/cachevar/seesion vấn đề của bạn đã được giải quyết.


"Xóa var / phiên"? Để đăng xuất tất cả khách hàng và làm trống giỏ hàng của họ? Không.
Fabian Schmengler

nup, chỉ cần xóa phiên, trong thư mục var
Hirus Unadkat

Thật không may điều này là như nhau. Ngoại trừ nếu bạn không sử dụng trình xử lý phiên tập tin. Trong trường hợp đó, nó không làm gì cả vì không có tệp nào
Fabian Schmengler

Sau đó, bạn cần làm là vào Hệ thống> Quyền> Vai trò và lưu vai trò.
Hirus Unadkat

Điều này đưa chúng ta đến một vấn đề khác với câu trả lời của bạn: ngay cả khi nó hoạt động, nó vẫn nỗ lực hơn là đăng xuất và đăng nhập lại, điều mà OP muốn tránh.
Fabian Schmengler

0

Thử đi:

  1. Chuyển đến Quản trị viên -> Hệ thống -> Quản lý bộ đệm
  2. Chọn tất cả các loại bộ đệm
  3. Giữ hành động như Làm mới và nhấn gửi.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.