【问题标题】:How to save input value to database magento2如何将输入值保存到数据库 magento2
【发布时间】:2019-02-16 10:39:24
【问题描述】:

我是 magento 的新手。我在 app/design/frontend/NewVendor/NewTheme/Magento_Newsletter/templates/subscribe.phtml 的电子邮件输入下输入了名为“名称”的新输入

<div class="block newsletter">
<div class="title"><strong><?= $block->escapeHtml(__('Newsletter')) ?></strong></div>
<div class="content">
    <form class="form subscribe"
        novalidate
        action="<?= $block->escapeUrl($block->getFormActionUrl()) ?>"
        method="post"
        data-mage-init='{"validation": {"errorClass": "mage-error"}}'
        id="newsletter-validate-detail">
        <div class="field newsletter">
            <label class="label" for="newsletter"><span><?= $block->escapeHtml(__('Sign Up for Our Newsletter:')) ?></span></label>
            <div class="control">
                <input name="email" type="email" id="newsletter"
                       placeholder="<?= $block->escapeHtml(__('Enter your email address')) ?>"
                       data-mage-init='{"mage/trim-input":{}}'
                       data-validate="{required:true, 'validate-email':true}"/>
                <input name="name" placeholder="Name"/>
            </div>

        </div>
        <div class="actions">
            <button class="action subscribe primary" title="<?= $block->escapeHtmlAttr(__('Subscribe')) ?>" type="submit">
                <span><?= $block->escapeHtml(__('Subscribe')) ?></span>
            </button>
        </div>
    </form>
</div>

我在 app/code/Mag/Newsletter/Setup/UpgradeSchema.php 的 newsletter_subscriber 表中创建了一个新列

class UpgradeSchema implements UpgradeSchemaInterface

{

public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $setup->startSetup();
    if (version_compare($context->getVersion(), '0.0.2', '<')) {
        $setup->getConnection()->addColumn(
            $setup->getTable('newsletter_subscriber'),
            'name',
            [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                'length' => 50,
                'nullable' => false,
                'default' => '',
                'comment' => 'Name'
            ]
        );
    }
    $setup->endSetup();
}

}

这是我在 app/code/Mag/Newsletter/Controller/Subscriber/NewAction.php 中的控制器

<?php
namespace Magebit\Newsletter\Controller\Subscriber;

class NewAction extends 
\Magento\Newsletter\Controller\Subscriber\NewAction
{
    public function execute() {
        $name = $this->getRequest()->getPost();
        var_dump($name);exit;
    }
}

现在控制器 var_dump 的输入值。

我想要实现的是将输入值保存到“newsletter_subscriber”表中的“name”列中。

无法正确处理。 接下来我该怎么做?

【问题讨论】:

    标签: magento2


    【解决方案1】:

    您必须获取订阅者模型的实例,然后使用本机方法,例如

    ->setName('NAME')
    

    然后

    ->save();
    

    【讨论】:

      【解决方案2】:

      请使用以下事件来保存您的自定义字段数据。

      第1步:请在路径Vendor/Module/etc/中创建文件events.xml

      【讨论】:

        【解决方案3】:

        请使用以下事件来保存您的自定义字段数据。

        第1步:请在路径Vendor/Module/etc/中创建文件events.xml

        第2步:请在路径Vendor/Module/Observer/下创建文件newsletterSubscriberSave.php

        _request = $请求; } 公共函数执行(观察者$观察者) { $subscriber = $observer->getEvent()->getSubscriber(); $params = $this->_request->getParams(); if(isset($params['subscriber_name'])) { $name = $params['subscriber_name']; $subscriber->setSubscriberName($name); } 返回$这个; } }

        【讨论】:

          【解决方案4】:

          首先在构造函数中注入 \Magento\Newsletter\Model\Subscriber 类:

          protected $_subscriber;
          
          public function __construct(
              ...
              \Magento\Newsletter\Model\Subscriber $subscriber
              ...
          ){
              ...
              $this->_subscriber= $subscriber;
              ...
          }
          

          那么你有两种可能的情况

          假设您有客户的电子邮件 然后在您的代码中,您可以调用以下代码来检查客户是否订阅了时事通讯:

              $checkSubscriber = $this->_subscriber->loadByEmail($customerEmail);
              
                  if ($checkSubscriber->isSubscribed()) {
                      // Customer is subscribed
                      $checkSubscriber->setName($name);
                  } else {
                      // Customer is not subscribed
                  }
              
                 $checkSubscriber->save();
          

          假设您有客户 ID 可以调用如下代码:

              $checkSubscriber = $this->_subscriber->loadByCustomerId($customerId);
              
              if ($checkSubscriber->isSubscribed()) {
                  // Customer is subscribed
                  $checkSubscriber->setName($name);
              } else {
                  // Customer is not subscribed
              }
          $checkSubscriber->save();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-22
            • 2018-03-21
            • 1970-01-01
            • 2020-10-29
            • 2021-07-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多