Проверка на стороне сервера в формах magento


Я создал форму на странице cms и направил ее на отправку действий контроллеру, как выполнить проверку на стороне сервера и сохранить данные в моей базе данных приложение/код/Код/Цена/просмотр/интерфейс/шаблоны/pricebeat.phtml

<div class="wk-mp-design">
<fieldset class="fieldset info wk-mp-fieldset">
    <legend class="legend">
        <span><?php echo __('Pricebeat') ?></span>
    </legend>
    <form action="<?php echo $block->getUrl('pricebeat/user/post', ['_secure' => $this->getRequest()->isSecure()]) ?>" enctype="multipart/form-data" method="post" id="quote-request" data-form="quote-request" data-mage-init='{"validation":{}}' data-hasrequired="<?php /* @escapeNotVerified */ echo __('* Required Fields') ?>">
        <div class="field required">
            <label class="label"><?php echo __('First Name') ?>:</label>
            <div class="control">
                    <input type="text" id="first_name" name="first_name" title="First Name" class="input-text" class="input-text" data-validate="{required:true}"/>
            </div>
        </div>
        <div class="field required">
            <label class="label"><?php echo __('Last Name') ?>:</label>
            <div class="control">
                    <input type="text" id="last_name" name="last_name" title="Last Name" class="input-text" class="input-text" data-validate="{required:true}"/>
            </div>
        </div>
        <div class="field required">
            <label class="label"><?php echo __('Email Address') ?>:</label>
            <div class="control">
                    <input type="email" id="email" name="email" title="Email Address" class="input-text" class="input-text" class="input-text" class="input-text" class="input-text" data-validate="{required:true, 'validate-email':true}"/>
            </div>
        </div>
        <div class="field required">
            <label class="label"><?php echo __('Phone Number') ?>:</label>
            <div class="control">
                    <input type="text" id="phonenumber" name="phonenumber" title="Phone Number" class="input-text" class="input-text" class="input-text" class="input-text" data-validate="{required:true, 'validate-number':true}"/>
            </div>
        </div>
        <div class="field required">
            <label class="label"><?php echo __('Account Number') ?>:</label>
            <div class="control">
                    <input type="text" id="account_number" name="account_number" title="Account Number" class="input-text" class="input-text" class="input-text" class="input-text" data-validate="{required:true, 'validate-number':true}"/>
            </div>
        </div>
        <div class="field required">
            <label class="label"><?php echo __('Invoice/Order Number') ?>:</label>
            <div class="control">
                    <input type="text" id="invoice_number" name="invoice_number" title="Invoice Number" class="input-text" class="input-text" class="input-text" class="input-text" data-validate="{required:true, 'validate-number':true}"/>
            </div>
        </div>
            <label class="label"><?php echo __('Product Url') ?>:</label>
            <div class="control">
            <input type="text" id="product_url" name="product_url" title="Product Url" class="input-text" class="input-text" data-validate="{required:true}"/>
            </div>
            <?php echo __("Product image") ?>
            <div class="control">
                    <input type="file" id="attachment" name="attachment"  title="Attachment" class="input-text" class="input-text" data-validate="{required:true}"/>
            </div>
        <button class="button wk-mp-btn" title="<?php echo __('Submit') ?>" type="submit" id="submit-btn">
            <span><span><?php echo __('Submit') ?></span></span>
        </button>
    </form>
</fieldset>
</div>
<script type="text/x-magento-init">
{
    "#quote-request": {
        "validation": {}
    }
}

App/code/Dyode/Pricebeat/Controller/User/Post.php

<?php
 namespace Dyode\Pricebeat\Controller\User;
 use Magento\Framework\App\Action\Action;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;

 class Post extends Action
  {
protected $resultPageFactory;

public function __construct(Context $context, PageFactory $pageFactory)
{
    $this->resultPageFactory = $pageFactory;
    parent::__construct($context);
}

public function execute()
{
   echo "hello from the controller";
   exit();

}
}

Я создал базу данных с помощью скрипта установки app/code/Dyode/Pricebeat/Setup/InstallSchema.php

 <?php
   namespace Dyode\Pricebeat\Setup;
    class InstallSchema implements \Magento\Framework\Setup\InstallSchemaInterface
     {
       /**
         * install tables
         * @param \Magento\Framework\Setup\SchemaSetupInterface $setup
         * @param \Magento\Framework\Setup\ModuleContextInterface $context
          * @return void
          * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
          */
           public function install(\Magento\Framework\Setup\SchemaSetupInterface $setup, \Magento\Framework\Setup\ModuleContextInterface $context)
     {
    $installer = $setup;
    $installer->startSetup();
    if (!$installer->tableExists('dyode_pricebeat_form')) {
        $table = $installer->getConnection()->newTable(
            $installer->getTable('dyode_pricebeat_form')
        )
        ->addColumn(
            'form_id',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            null,
            [
                'identity' => true,
                'nullable' => false,
                'primary'  => true,
                'unsigned' => true,
            ],
            'Form ID'
        )
        ->addColumn(
            'first_name',
            \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            255,
            ['nullable => false'],
            'First Name'
        )
        ->addColumn(
            'last_name',
            \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            255,
            [],
            'Last Name'
        )
        ->addColumn(
            'email',
            \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            255,
            [],
            'Email'
            )
        ->addColumn(
            'phonenumber',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            255,
            [],
            'Phone Number'
        )
        ->addColumn(
            'account_number',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            255,
            [],
            'Account Number'
        )
        ->addColumn(
            'invoice_number',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            255,
            [],
            'Invoice Number'
        )
        ->addColumn(
            'product_url',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            1,
            ['nullable => false'],
            'Product Url'
        )
        ->addColumn(
            'product_image_url',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            1,
            ['nullable => false'],
            'Product Image Url'
        )

        ->addColumn(
            'imagethumbnail',
            \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            255,
            [],
            'Image Thumbnail'
        )
        ->addColumn(
            'show_in_frontend',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            1,
            ['nullable => false'],
            'form Show in Frontend'
        )
        ->addColumn(
            'status',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            1,
            ['nullable => false'],
            'form Status'
        )
        ->addColumn(
            'created_at',
            \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
            null,
            [],
            ' Created At'
        )
        ->addColumn(
            'updated_at',
            \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
            null,
            [],
            ' Updated At'
        )
        ->setComment('Video Table');
        $installer->getConnection()->createTable($table);

        $installer->getConnection()->addIndex(
            $installer->getTable('dyode_pricebeat_form'),
            $setup->getIdxName(
                $installer->getTable('dyode_pricebeat_form'),
                ['firstname','lastname','email','phonenumber','account_number','product_url','imagethumbnail'],
                \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT
            ),
            ['firstname','lastname','email','phonenumber','account_number','product_url','imagethumbnail'],
            \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT
        );
    }
    $installer->endSetup();
  }
  }
Author: Nismath vi, 2018-09-17

2 answers

Вы можете попробовать приведенный ниже код для проверки, как показано ниже:

<?php
namespace Dyode\Pricebeat\Controller\User;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\HTTP\PhpEnvironment\Request;

class Post extends Action
{
    protected $resultPageFactory;

    public function __construct(Context $context, PageFactory $pageFactory)
    {
        $this->resultPageFactory = $pageFactory;
        parent::__construct($context);
    }

    public function execute()
    {
        $this->validatedParams()
        echo "hello from the controller";
        exit();
    }

    private function validatedParams()
    {
        $request = $this->getRequest();
        if (trim($request->getParam('first_name')) === '') {
            throw new LocalizedException(__('First Name is missing'));
        }

        if (trim($request->getParam('last_name')) === '') {
            throw new LocalizedException(__('Last Name is missing'));
        }

        if (false === \strpos($request->getParam('email'), '@')) {
            throw new LocalizedException(__('Invalid email address'));
        }
        //Add your more validations here
        return $request->getParams();
    }
}

Вам нужно добавить дополнительную проверку, как я добавил в приведенном выше примере.

 0
Author: Sukumar Gorai, 2018-09-17 09:32:07

Вам просто нужно следовать module-contact модулю Post.php контроллеру

Путь : vendor/magento/module-contact/Controller/Index/Post.php

/**
     * @return array
     * @throws \Exception
     */
    private function validatedParams()
    {
        $request = $this->getRequest();
        if (trim($request->getParam('name')) === '') {
            throw new LocalizedException(__('Name is missing'));
        }
        if (trim($request->getParam('comment')) === '') {
            throw new LocalizedException(__('Comment is missing'));
        }
        if (false === \strpos($request->getParam('email'), '@')) {
            throw new LocalizedException(__('Invalid email address'));
        }
        if (trim($request->getParam('hideit')) !== '') {
            throw new \Exception();
        }

        return $request->getParams();
    }
 0
Author: PЯINCƏ, 2018-09-17 09:57:37