magento 2 베타의 프런트 엔드에서 세션 메시지를 표시하는 방법


12

magento 2 모듈에 오류 또는 성공 메시지를 표시하고 싶습니다. 클래스 이름으로 프론트 엔드 컨트롤러를 확장했습니다 \Magento\Framework\App\Action\Action. 그런 다음 다음 코드를 사용하여 클라이언트를 홈페이지로 리디렉션합니다.

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

모든 것이 잘 작동하지만이 줄은 오류를 인쇄하지 않습니다.

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

상점 첫 화면 또는 관리자 패널에 메시지를 표시해야합니까?
KAndy

상점

답변:


7

Magento2 Beta 소스의 디스플레이 메시지와 관련된 문제에 직면했습니다. 일부 소스에서는 기본적으로 오류 및 성공 메시지를 표시하지만 어떤 경우에는 표시되지 않으며 아래 단계를 따르십시오.

1 단계 : Darsh \ Crud \ Block \ Message.php의 사용자 정의 모듈에 Message.php 파일을 생성했습니다


네임 스페이스 Darsh \ Crud \ Block;

메시지가 \ Magento \ Framework \ View \ Element \ Messages를 확장 함 {

    공공 함수 __construct (
        \ Magento \ Framework \ View \ Element \ Template \ Context $ context,
        \ Magento \ Framework \ Message \ Factory $ messageFactory,
        \ Magento \ Framework \ Message \ CollectionFactory $ collectionFactory,
        \ Magento \ Framework \ Message \ Manager 인터페이스 $ messageManager,       
        배열 $ data = []
    ) {
        부모 :: __ construct (
            문맥,
            $ messageFactory,
            팩토리 팩토리,
            $ messageManager,
            $ data
        );       
    }

    보호 된 함수 _prepareLayout ()
    {
        $ this-> addMessages ($ this-> messageManager-> getMessages (true));       
        부모 반환 :: _ prepareLayout ();
    }

}

2 단계 : 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 Ali

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>

감사합니다 마리우스
Naveenbos

1
감사합니다 @Naveen. 내 사용자 지정 모듈 젠토 2에서 잘 작동
ANKIT 샤

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 객체를 사용하여 메시지를 추가했습니다.

$ resultRedirect-> setUrl ($ this-> _ redirect ( 'crud / index / form'));

아래 컨트롤러 코드를 참조하십시오

네임 스페이스 Darsh \ Crud \ Controller \ Index;

Magento \ Framework \ App \ Filesystem \ DirectoryList를 사용하십시오.

Post 클래스는 \ Magento \ Contact \ Controller \ Index {
// 클래스 Post는 \ Magento \ Framework \ App \ Action \ Action {


    공용 함수 execute () {
        $ data = $ this-> getRequest ()-> getPostValue ();

        if (! $ data) {
            $ this-> _ redirect ( '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', array ( 'fileId'=> 'image'));
                    $ uploader-> setAllowedExtensions (array ( 'jpg', 'jpeg', 'gif', 'png'));
                    $ uploader-> setAllowRenameFiles (true);
                    $ uploader-> setFilesDispersion (true);
                    $ mediaDirectory = $ this-> _ objectManager-> get ( '마 젠토 \ 프레임 워크 \ 파일 시스템')
                            -> getDirectoryRead (DirectoryList :: MEDIA);
                    $ config = $ this-> _ objectManager-> get ( 'Darsh \ Crud \ Model \ Crud');
                    $ result = $ uploader-> 저장 ($ mediaDirectory-> getAbsolutePath ( 'bannerslider / images'));
                    unset ($ result [ 'tmp_name']);
                    unset ($ result [ 'path']);
                    $ data [ 'image'] = $ result [ '파일'];
                } catch (예외 $ e) {
                    $ data [ 'image'] = $ _FILES [ 'image'] [ '이름'];
                }
            } 그렇지 않으면 (isset ($ data [ 'image'] [ 'delete'])) {
                $ data [ 'image'] = '';
            } 그렇지 않으면 (isset ($ data [ 'image'] [ 'value'])) {
                $ data [ 'image'] = $ data [ 'image'] [ '값'];
            }

            $ model-> setData ($ data);
            $ model-> setStoreId ($ this-> storeManager-> getStore ()-> getId ())
                        -> setStores ([$ this-> storeManager-> getStore ()-> getId ()])
                        -> 저장 ();
            {
                $ model-> save ();
                $ this-> messageManager-> addSuccess (
                        __ ( '의견과 질문이 있으면 연락해 주셔서 감사합니다. 조만간 답변 드리겠습니다.')
                );
                // $ this-> _ redirect ( 'crud / index / form');
                //반환;
            } catch (\ Exception $ e) {
                $ this-> messageManager-> addError (
                        __ ( '지금은 귀하의 요청을 처리 할 수 ​​없습니다. 죄송합니다. 우리가 아는 전부입니다.');
                // $ this-> _ redirect ( 'crud / index / form');
                //반환;
            }
        } catch (\ Exception $ e) {
            $ this-> messageManager-> addError (
                    __ ( '지금은 귀하의 요청을 처리 할 수 ​​없습니다. 죄송합니다. 우리가 아는 전부입니다.')
            );
            // $ this-> _ redirect ( 'crud / index / form');
            //반환;
        }

        $ resultRedirect-> setUrl ($ this-> _ redirect ( 'crud / index / form'));

        return $ resultRedirect;
    }

}

감사.


2

XDEBUG를 사용 해보고 컨트롤러 동작에서 중단 점을 설정하십시오. 아마도 리디렉션이 중복되어 관리자에서 메시지가 손실되었을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.