Magento 2: Обратите внимание на ошибку - Преобразование массива в строку


Я пытался сохранить Значения полей множественного выбора в БД.

Я добавил поле в форму правила продаж, используя ui_component.

<fieldset name="exclude_brands">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Exclude Brands</item>
            <item name="collapsible" xsi:type="boolean">true</item>
            <item name="sortOrder" xsi:type="number">15</item>
        </item>
    </argument>
    <field name="start_date" formElement="date">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="source" xsi:type="string">sales_rule</item>
            </item>
        </argument>
        <settings>
            <validation>
                <rule name="validate-date" xsi:type="boolean">true</rule>
            </validation>
            <dataType>text</dataType>
            <label translate="true">Start Date</label>
            <visible>true</visible>
            <dataScope>start_date</dataScope>
        </settings>
    </field>
    <field name="end_date" formElement="date">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="source" xsi:type="string">sales_rule</item>

            </item>
        </argument>
        <settings>
            <validation>
                <rule name="validate-date" xsi:type="boolean">true</rule>
            </validation>
            <dataType>text</dataType>
            <label translate="true">End Date</label>
            <visible>true</visible>
            <dataScope>end_date</dataScope>
        </settings>
    </field>
    <field name="brand_ids" formElement="select">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="source" xsi:type="string">sales_rule</item>
            </item>
        </argument>
        <settings>
            <validation>
                <rule name="validate-brands" xsi:type="boolean">true</rule>
            </validation>
            <dataType>varchar</dataType>
            <label translate="true">Brand List</label>
            <dataScope>brand_ids</dataScope>
        </settings>
        <formElements>
            <select>
                <settings>
                    <options class="Vendor\Module\Block\SalesRule\BrandList"/>

                </settings>
            </select>
        </formElements>
    </field>
</fieldset>

Чтобы сохранить это поле, я создал плагин с после выполнения метода .

<type name="Magento\SalesRule\Controller\Adminhtml\Promo\Quote\Save">
    <plugin name="save_brands" type="Vendor\Module\Model\Plugin\brands" sortOrder="1"/>
</type>

Vendor/Module/Model/Plugin/Brands.php

public function afterexecute(\Magento\SalesRule\Controller\Adminhtml\Promo\Quote\Save $save,$result)
{

    $ruleId =  $save->getRequest()->getParam('rule_id'); 

    $brandIds = implode(',',$save->getRequest()->getParam('brand_ids'));

    try{
        $salesRuleData =  $this->salesRule->load($ruleId);
        $salesRuleData->setStartDate($save->getRequest()->getParam('start_date'));
        $salesRuleData->setEndDate($save->getRequest()->getParam('end_date'));
        $salesRuleData->setBrandIds($brandIds);
        $salesRuleData->save();         
    }
    catch(Exception $e)
    {
        echo $e->getMessage();  
    }

}

Теперь проблема в том, что значение поля сохраняется в БД, но возникает исключение, как показано ниже.

Что-то пошло не так при сохранении данных правила. Пожалуйста, просмотрите журнал ошибок.

Проверьте Ниже Журнал Ошибок.

(Exception(code: 0): Notice: Array to string conversion in C:\\xampp\\htdocs\\mage2\\vendor\\magento\\zendframework1\\library\\Zend\\Db\\Statement\\Pdo.php on line 228 at C:\\xampp\\htdocs\\mage2\\vendor\\magento\\framework\\App\\ErrorHandler.php:61)"} []

Любой, кто сталкивался с такими же проблемами раньше. Действительно нужна помощь в этом.

Заранее благодарю.

Author: Evince Development, 2018-04-04

2 answers

Я не знаю, почему плагин не работает с текущим сценарием.

Если кто-нибудь скажет, почему плагин не работал с этим сценарием?

Итак, я использовал событие с именем adminhtml_controller_salesrule_prepare_save, чтобы сохранить значение моих полей в БД .

Вот полный код.

Vendor/Module/etc/adminhtml/events.xml

<event name="adminhtml_controller_salesrule_prepare_save">
    <observer name="save_brands" 
        instance="Vendor\Module\Observer\SaveExcludedBrands" />
</event>

Затем создайте файл наблюдателя в своем модуле.

Vendor/Module/Observer/SaveExcludedBrands.php

public function execute(Observer $observer)
{
    $data = $observer->getRequest()->getPostValue();
    //print_r($data); exit;
    $request = $observer->getEvent()->getRequest();

    $brands = implode(',',$data['brands']);

    $startDate = $this->timeZoneInterface->date($data['start_date'])->format('Y-m-d'); 
    $endDate = $this->timeZoneInterface->date($data['end_date'])->format('Y-m-d');


    $request->setPostValue('brands',$brands);
    $request->setPostValue('start_date',$startDate);
    $request->setPostValue('end_date',$endDate);
}

Теперь нет исключение и уведомление и его работа.

 2
Author: anonymous, 2018-04-13 07:39:47

Можете ли вы попробовать это

public function afterexecute(\Magento\SalesRule\Controller\Adminhtml\Promo\Quote\Save $save,$result)
{

    $ruleId =  $save->getRequest()->getParam('rule_id'); 

  $brandIds = implode(',',$save->getRequest()->getParam('brands'));

    try{
        $salesRuleData =  $this->salesRule->load($ruleId);
        $salesRuleData->setStartDate($save->getRequest()->getParam('start_date'));
        $salesRuleData->setEndDate($save->getRequest()->getParam('end_date'));
        $salesRuleData->setBrands($brandIds);
        $salesRuleData->save();         
    }
    catch(Exception $e)
    {
        echo $e->getMessage();  
    }

}
 0
Author: Sourav, 2018-04-11 06:25:18