Как добавить данные post из пользовательской формы в пользовательскую таблицу в Magento 2?

#php #magento #magento2 #magento-2.3 #magento2.2

#php #magento #magento2 #magento-2.3 #magento2.2

Вопрос:

Я просмотрел несколько ссылок, но не нашел никаких соответствующих ответов. Я делаю это с помощью Model / ResourceModel, и при печати я получаю данные post из пользовательской формы, но они не вставляются в пользовательскую таблицу.

Пожалуйста, поделитесь кодом или ссылочной ссылкой.

Заранее спасибо

Ответ №1:

Шаг 1: Создайте XML-файл: routename_controllername_actionname.xml для вызова файла phtml

     <?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block class="CustomB2BRFQModuleBlockRequestForQuoteForm" name="custom_module_form"
                   template="CustomB2BRFQ_Module::rfq.phtml" />
        </referenceContainer>
    </body>
</page>
  

Шаг 2: Создайте свой файл phtml: как в моем случае

 <div class="row">
    <div class="col-md-8">
        <form name="addData" method="post" id="addData" class="form" action="<?php echo $this->getFormAction(); ?>" data-hasrequired="<?= $block->escapeHtmlAttr(__('* Required Fields')) ?>"
         data-mage-init='{"validation":{}}'>
            <fieldset class="fieldset">
            <legend class="legend"><span>Request For Quote</span></legend>
                <fieldset class="fieldset row">
                    <div class="fields col-md-6">
                        <div class="field name required">
                            <label class="label" for="uname"><span>Name</span></label>
                            <div class="control">
                            <input name="uname" id="uname" title="Name" value="" class="input-text" type="text" data-validate="{required:true}">
                            </div>
                        </div>
                        <div class="field required">
                            <label class="label" for="email"><span>Email</span></label>
                            <div class="control">
                                <input name="email" id="email" title="Email" value="" class="input-text" type="text" data-validate="{required:true}">
                            </div>
                        </div>                       
                        <div class="field required">
                            <label class="label" for="category"><span>Category</span></label>
                            <div class="control">
                                <input name="category" id="category" title="Category" value="" class="input-text" type="text" data-validate="{required:true}">
                            </div>
                        </div>
                        <div class="field required">
                            <label class="label" for="company"><span>Company</span></label>
                            <div class="control">
                                <input type="text" name="company" id="company"  data-validate="{required:true}">
                            </div>
                        </div>
                        <div class="field required">
                            <label class="label" for="gstnumber"><span>GST Number</span></label>
                            <div class="control">
                                <input type="text" name="gstnumber" id="gstnumber"  data-validate="{required:true}">
                            </div>
                        </div>
                        <div class="field required">
                            <label class="label" for="phonenumber"><span>Phone Number</span></label>
                            <div class="control">
                                <input type="text" name="phonenumber" id="phonenumber"  data-validate="{required:true}">
                            </div>
                        </div>
                        <div class="field required">
                            <label class="label" for="itemsrequired"><span>Items Required</span></label>
                            <div class="control">
                                <input type="text" name="itemsrequired" id="itemsrequired"  data-validate="{required:true}">
                            </div>
                        </div>
                        <div class="field required">
                            <label class="label" for="location"><span>Location</span></label>
                            <div class="control">
                                <input type="text" name="location" id="location"  data-validate="{required:true}">
                            </div>
                        </div>
                        
                    </div>
            </fieldset>
            </fieldset>
        <div class="actions-toolbar">
            <div class="primary">
                <button type="submit" class="action submit primary" title="Save"><span>Submit Request</span></button>
            </div>
        </div>
        </form>
    </div>
</div>
  

Шаг 3: Добавьте логику в файл контроллера для сохранения данных в базе данных:

 <?php
namespace CustomB2BRFQModuleControllerIndex;
class Index extends MagentoFrameworkAppActionAction
{
    /** @var  MagentoFrameworkViewResultPage */
    protected $resultPageFactory;
    
    /**
     * @var CustomB2BRFQModuleModelquoteFactory
     */
    protected $requestForQuoteFactory;


    /**
     * @var CustomB2BRFQModuleModelquote
     */
    protected $requestForQuote;
    
    
    /**      * @param MagentoFrameworkAppActionContext $context      */
    public function __construct(MagentoFrameworkAppActionContext $context, 
    MagentoFrameworkViewResultPageFactory $resultPageFactory,
    CustomB2BRFQModuleModelRequestForQuoteFactory $requestForQuoteFactory,
    CustomB2BRFQModuleModelRequestForQuote $requestForQuote)
    {
        $this->resultPageFactory = $resultPageFactory;
        $this->requestForQuoteFactory = $requestForQuoteFactory;
        $this->requestForQuote = $requestForQuote;
        parent::__construct($context);
    }
    /**
     * Blog Index, shows a list of recent blog posts.
     *
     * @return MagentoFrameworkViewResultPageFactory
     */
     public function execute()
    {
         //return $resultPage = $this->resultPageFactory->create();die;
        $resultRedirect = $this->resultRedirectFactory->create();
        try{

            $request = $this->getRequest()->getParams();
            if(isset($request) amp;amp; isset($request['uname']) amp;amp; isset($request['email']) amp;amp; isset($request['company'])
            amp;amp; isset($request['category']) amp;amp; isset($request['gstnumber']) amp;amp; isset($request['itemsrequired']) amp;amp; isset($request['location'])
            amp;amp; isset($request['phonenumber'])){
            $uname = $request['uname'];
            $email = $request['email'];
            $company = $request['company'];
            $category = $request['category'];
            $gstnumber = $request['gstnumber'];
            $itemsrequired = $request['itemsrequired'];
            $location = $request['location'];
            $phonenumber = $request['phonenumber'];
            
            $requestquote = $this->requestForQuoteFactory->create();
            $requestquote->setName($uname);
            $requestquote->setEmail($email);
            $requestquote->setCompany($company);
            $requestquote->setCategory($category);
            $requestquote->setGstNumber($gstnumber);
            $requestquote->setItemsRequired($itemsrequired);
            $requestquote->setLocation($location);
            $requestquote->setPhoneNumber($phonenumber);

            $requestquote->save();
            $message = __('Quote is successfully submitted.');
            $this->messageManager->addSuccessMessage($message);
            $this->resultPageFactory->create();
            return $resultRedirect->setPath('quote/index/index');
        
        }else{
        $message = __('Filled all the details.');
        $this->messageManager->addSuccessMessage($message);
        return $this->resultPageFactory->create();
    }
          
        }catch (Exception $e){
            $this->messageManager->addException($e, __('We can't submit your request, Please try again.'));
            $this->_objectManager->get('PsrLogLoggerInterface')->critical($e);
            return $resultRedirect->setPath('quote/index/index');
        }
    }
}
  

Спасибо!
Я попробовал, и это работает