如何在Magento2的同个phtml文件中展示默认格式的成功消息
Magento2 表单校验通过后显示默认成功提示实现步骤
1. 修正现有Block代码
你提供的Block代码逻辑基本正确,仅需修正编码转义问题,最终可用代码如下:
<?php namespace Test\Validation\Block; class Index extends \Magento\Framework\View\Element\Template { protected $_messageManager; public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\Message\ManagerInterface $messageManager, array $data = [] ) { parent::__construct($context, $data); $this->_messageManager = $messageManager; } public function addSuccessMessage($message) { $this->_messageManager->addSuccess(__($message)); } }
注:实际添加成功消息的逻辑通常放在表单提交的控制器中,比在Block中调用更符合Magento开发规范
2. 编写表单提交对应的控制器
你需要先创建处理表单提交的控制器文件,路径为app/code/Test/Validation/Controller/Index/Submit.php,代码如下:
<?php namespace Test\Validation\Controller\Index; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Magento\Framework\Message\ManagerInterface as MessageManager; class Submit extends Action { protected $messageManager; public function __construct( Context $context, MessageManager $messageManager ) { $this->messageManager = $messageManager; parent::__construct($context); } public function execute() { // 获取表单提交的所有参数 $postData = $this->getRequest()->getPostValue(); $isValid = true; // 这里写你的字段校验逻辑,所有字段校验通过才设置$isValid为true // 举个例子:校验必填字段是否为空 if (empty($postData['username']) || empty($postData['email'])) { $isValid = false; $this->messageManager->addErrorMessage(__('必填字段不能为空')); } if ($isValid) { // 校验通过添加成功消息 $this->messageManager->addSuccess(__('Your Data is validate!')); } // 重定向回表单页面,必须重定向才能渲染出session存储的消息 return $this->_redirect('*/*/index'); } }
3. 修改phtml模板文件
你的phtml模板文件路径为app/code/Test/Validation/view/frontend/templates/index.phtml,需要添加两部分代码:
3.1 顶部添加Magento默认消息渲染代码
<?php // 渲染系统所有消息 echo $block->getLayout()->createBlock(\Magento\Framework\View\Element\Messages::class)->toHtml(); ?>
3.2 表单添加前端校验规则
表单要添加Magento自带的前端校验,避免不符合规则的内容提交到后端,示例表单代码:
<form id="validate-form" action="<?php echo $block->getUrl('validation/index/submit') ?>" method="post" data-mage-init='{"validation":{}}'> <!-- 举例子的字段,可替换为你自己的字段 --> <div class="field required"> <label for="username" class="label"><span><?php echo __('用户名') ?></span></label> <div class="control"> <input type="text" name="username" id="username" data-validate='{"required":true}' class="input-text"> </div> </div> <div class="field required"> <label for="email" class="label"><span><?php echo __('邮箱') ?></span></label> <div class="control"> <input type="email" name="email" id="email" data-validate='{"required":true, "validate-email":true}' class="input-text"> </div> </div> <div class="actions-toolbar"> <div class="primary"> <button type="submit" class="action submit primary"> <span><?php echo __('提交') ?></span> </button> </div> </div> </form>
4. 功能验证
完成上述代码编写后,执行以下命令生效:
- 清除Magento缓存:
php bin/magento cache:clean - 如果你是生产模式,需要部署静态内容:
php bin/magento setup:static-content:deploy -f - 访问你的表单页面,填写符合规则的字段点击提交,即可看到Magento默认样式的成功提示消息
常见问题排查:如果消息不显示,先确认控制器提交后是否执行了重定向,Magento的消息存储在session中,必须重定向后才能渲染生效
内容的提问来源于stack exchange,提问作者Ekta Rathod
相关产品推荐
相关产品推荐

