วิธีแสดงข้อความเซสชันที่ส่วนหน้าใน magento 2 เบต้า


12

ฉันต้องการแสดงข้อผิดพลาดหรือข้อความความสำเร็จในโมดูล magento 2 ของฉัน ผมจึงขยายการควบคุม front-end \Magento\Framework\App\Action\Actionของฉันกับชื่อชั้น จากนั้นฉันเปลี่ยนเส้นทางไคลเอนต์ไปยังหน้าแรกโดยใช้รหัสต่อไปนี้

$this->messageManager->addError($SomeMessage);
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath($base_path);

ทุกอย่างทำงานได้ดี แต่บรรทัดนี้ไม่พิมพ์ข้อผิดพลาด

$this->messageManager->addError($SomeMessage);

คุณต้องแสดงข้อความที่หน้าร้านหรือในแผงควบคุมของผู้ดูแลระบบหรือไม่?
KAndy

ฉันต้องการแสดงข้อความที่หน้าร้าน
Shaheer Ali

คำตอบ:


7

ฉันประสบปัญหาเกี่ยวกับข้อความแสดงในแหล่งที่มา Magento2 เบต้า ในบางแหล่งโดยข้อผิดพลาดการแสดงผลเริ่มต้นและข้อความความสำเร็จ แต่ในบางกรณีมันไม่แสดงแล้วทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1: ฉันสร้างไฟล์ Message.php ในโมดูลที่กำหนดเองใน Darsh \ Crud \ Block \ Message.php


เนมสเปซ Darsh \ Crud \ Block;

ข้อความคลาสขยาย \ Magento \ Framework \ View \ Element \ Messages {

    ฟังก์ชั่นสาธารณะ __ โครงสร้าง (
        \ Magento \ Framework \ View \ Element \ Template \ บริบท $ บริบท
        \ Magento \ Framework \ Message \ Factory $ message โรงงาน,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ Manager อินเทอร์เฟซ $ messageManager       
        อาร์เรย์ $ data = []
    ) {
        ผู้ปกครอง :: __ สร้าง (
            $ บริบท
            $ messageFactory,
            $ collectionFactory,
            $ messageManager,
            ข้อมูล $
        );       
    }

    ฟังก์ชันที่มีการป้องกัน _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (จริง));       
        ผู้ปกครองกลับ :: _ prepareLayout ();
    }

}

ขั้นตอนที่ 2: เพิ่มบล็อคข้อความไว้ใน handeler ใน Darsh \ Crud \ view \ frontend \ layout \ crud_index_form.xml

   <referenceContainer name="page.messages">
        <block class="Darsh\Crud\Block\Message" name="darsh.crud.message" />
    </referenceContainer>

โปรดเพิ่มแท็กเปิดและปิดแท็ก <> สำหรับการจัดการเลย์เอาต์

ตอนนี้คุณสามารถเห็นข้อความที่กำหนดเองของคุณเพิ่มใน Darsh \ Crud \ Controller \ Index \ Form

หากคุณประสบปัญหาใด ๆ โปรดดูตัวอย่างโมดูลที่https://github.com/Darshanmodi1427/Magento2_Crud_Operation.git


หลังจากการปรับเปลี่ยนบางอย่างผมได้รับผล :)
Shaheer อาลี

7

ในไฟล์เลย์เอาต์ฉันใช้โค้ดด้านล่าง ตอนนี้ฉันได้รับข้อความที่ส่วนหน้า

<referenceContainer name="page.messages">            
    <block class="Magento\Framework\View\Element\Template" name="ajax.message.placeholder" template="Magento_Theme::html/messages.phtml"/>
    <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
</referenceContainer>

Thankyou Marius
Naveenbos

1
ขอบคุณ @ Naveen ทำงานได้ดีใน Magento 2 ในโมดูลที่กำหนดเองของฉัน
Ankit Shah

6

ฉันประสบปัญหาเดียวกันและฉันสามารถแก้ไขได้โดยเพิ่มสิ่งต่อไปนี้ในไฟล์เลย์เอาต์ของฉัน:

<body>
    <!-- your layout content -->
    <referenceContainer name="page.messages">
        <block class="Magento\Framework\View\Element\Messages" name="messages" as="messages"/>
    </referenceContainer>
</body>

สิ่งนี้ควรแก้ไข;)


2

คุณลองส่งคืนบรรทัดสุดท้ายของรหัสหรือไม่

return $resultRedirect->setPath($base_path);

addErrorฟังก์ชั่นที่เกิดขึ้นจริงดูดีเว้นแต่$SomeMessageตัวแปรจะว่างเปล่าคุณได้ตรวจสอบสิ่งนั้นด้วยหรือไม่?

หากล้มเหลวคุณอาจลองเปลี่ยนเส้นทางโดยใช้_redirectฟังก์ชันแทนเช่น:

$this->_redirect('*/*/');

บางทีresultRedirectฟังก์ชั่นจะลบเซสชันข้อความเพื่อไม่ให้ข้อความของคุณปรากฏ


2

ใช่ฉันได้เพิ่มข้อความโดยใช้ $ resultRedirect object ด้วย

$ resultRedirect-> setUrl ($ นี้ -> _ เปลี่ยนเส้นทาง ( 'CRUD / index / form'));

โปรดดูรหัสควบคุมด้านล่าง

namespace Darsh \ Crud \ Controller \ ดัชนี;

ใช้ Magento \ Framework \ App \ Filesystem \ DirectoryList;

โพสต์ในชั้นเรียนขยาย \ Magento \ Contact \ Controller \ ดัชนี {
// คลาสของโพสต์ขยาย \ Magento \ Framework \ App \ Action \ Action {


    ฟังก์ชั่นสาธารณะรัน () {
        $ data = $ this-> getRequest () -> getPostValue ();

        ถ้า (! $ data) {
            $ this -> _ เปลี่ยนเส้นทาง ( 'CRUD / index / form');
            กลับ;
        }

        $ resultRedirect = $ this-> resultRedirectFactory-> create ();
        ลอง {
            $ model = $ this -> _ objectManager-> create ('Darsh \ Crud \ Model \ Crud');
            if (isset ($ _ FILES ['image'] ['name']) && $ _FILES ['image'] ['name']! = '') {
                ลอง {
                    $ uploader = $ this -> _ objectManager-> create ('\ Magento \ MediaStorage \ Model \ File \ Uploader', อาร์เรย์ ('fileId' => 'image'));
                    $ uploader-> setAllowedExtensions (อาร์เรย์ ('jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> setAllowRenameFiles (จริง);
                    $ uploader-> setFilesDispersion (จริง);
                    $ mediaDirectory = $ this -> _ objectManager-> get ('Magento \ Framework \ Filesystem')
                            -> getDirectoryRead (DirectoryList :: มีเดีย);
                    $ config = $ this -> _ objectManager-> get ('Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> save ($ mediaDirectory-> getAbsolutePath ('bannerslider / images'));
                    ไม่มีการตั้งค่า ($ ผล [ 'tmp_name']);
                    ไม่มีการตั้งค่า ($ ผล [ 'เส้นทาง']);
                    $ data ['image'] = $ result ['file'];
                } catch (ข้อยกเว้น $ e) {
                    $ data ['image'] = $ _FILES ['image'] ['name'];
                }
            } ถ้า (isset ($ data ['image'] ['delete'])) {
                $ data ['image'] = '';
            } ถ้า (isset ($ data ['image'] ['value'])) {
                $ data ['image'] = $ data ['image'] ['value'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore () -> getId ())
                        -> setStores ([$ this-> storeManager-> getStore () -> getId ()])
                        -> บันทึก ();
            ลอง {
                $ model-> บันทึก ();
                $ this-> messageManager-> addSuccess (
                        __ ('ขอบคุณที่ติดต่อเราพร้อมกับความคิดเห็นและคำถามของคุณเราจะตอบคุณเร็ว ๆ นี้')
                );
                // $ นี้ -> _ เปลี่ยนเส้นทาง ( 'CRUD / index / form');
                // กลับมา;
            } catch (\ Exception $ e) {
                $ this-> messageManager-> addError (
                        __ ('เราไม่สามารถดำเนินการตามคำขอของคุณได้ในตอนนี้ขออภัยนั่นคือทั้งหมดที่เรารู้'));
                // $ นี้ -> _ เปลี่ยนเส้นทาง ( 'CRUD / index / form');
                // กลับมา;
            }
        } catch (\ Exception $ e) {
            $ this-> messageManager-> addError (
                    __ ('เราไม่สามารถดำเนินการตามคำขอของคุณได้ในตอนนี้ขออภัยนั่นคือทั้งหมดที่เรารู้')
            );
            // $ นี้ -> _ เปลี่ยนเส้นทาง ( 'CRUD / index / form');
            // กลับมา;
        }

        $ resultRedirect-> setUrl ($ นี้ -> _ เปลี่ยนเส้นทาง ( 'CRUD / index / form'));

        ส่งกลับ $ resultRedirect;
    }

}

ขอบคุณ


2

ลองใช้ XDEBUG ตั้งค่าจุดหยุดที่แอ็คชันคอนโทรลเลอร์ของคุณ อาจเป็นการเปลี่ยนเส้นทางซ้ำและทำให้ข้อความหายไปในผู้จัดการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.