Magento 2.1.5 добавить атрибут продукта программно не работает


Я хочу создать атрибут программно. Я протестировал несколько кодов, но все они не работают для меня.

Вот мои шаги:

  1. Создать InstallData.php файл с кодом, подобным приведенному ниже.

    • В InstallData.php мой PhpStorm выделяет "неопределенный класс Подслушивающая установка"
  2. Я использую команду в корневой папке magento "php bin/настройка magento: обновление". -

    • В InstallData.php мой PHP-шторм выделяет "неопределенный класс EavSetupFactory"
    • После этого я вижу "Пожалуйста, повторите команду компиляции Magento"
    • Я проверил панель администратора, там нет новых атрибутов
  3. Следующим шагом я использую "php bin/настройка magento:di:компиляция".

    • В - InstallData.php теперь все в порядке, нет связи с "неопределенным классом EavSetupFactory"я могу перенаправить в этот класс
    • Проверьте панель администратора, по-прежнему нет атрибутов
  4. Снова используйте "php bin/magento настройка: обновление".

    • В - InstallData.php мой PhpStorm выделяет "неопределенный класс EavSetupFactory"
    • По-прежнему нет новых атрибутов в панели администратора

Я повторил свои шаги с различными примерами кода в InstallData.php . Как я уже упоминал выше, это лишь один из многих, которые я использовал, они очень похожи (но все же есть некоторые небольшие различия), и файл выглядит так:

namespace LCB\Import\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory; //here is mentioned highlight
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{

private $eavSetupFactory;

public function __construct(EavSetupFactory $eavSetupFactory)
{
    $this->eavSetupFactory = $eavSetupFactory;
}

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
    $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

    $eavSetup->addAttribute(
        \Magento\Catalog\Model\Product::ENTITY,
        'test_attribute',
        [
            'type' => 'int',
            'backend' => '',
            'frontend' => '',
            'label' => 'Test Attribute',
            'input' => '',
            'class' => '',
            'source' => '',
            'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
            'visible' => true,
            'required' => false,
            'user_defined' => false,
            'default' => 0,
            'searchable' => false,
            'filterable' => false,
            'comparable' => false,
            'visible_on_front' => false,
            'used_in_product_listing' => true,
            'unique' => false,
            'apply_to' => ''
        ]
    );
}
}
Author: mark, 2017-04-14

1 answers

У вас уже установлен LCB_Import? Проверьте таблицу setup_module для этой записи. Если есть один установочный файл, он не будет уволен. Вам нужно переместить код в обновленную версию данных и модуля bump. Если нет, то сначала очистите кэш, а затем запустите php bin/magento module:enable LCB_Import, а затем php bin/magento setup:upgrade (хотя установка: обновление должно включить все модули, которых еще нет в файле app/etc/config.php).

Заводские классы создаются на лету в режиме разработчика или во время команды setup:di:compile. Итак, PhpStorm показывает вам неопределенный класс, потому что он еще не был создан в папке var/generation.

 1
Author: Zefiryn, 2017-04-14 20:22:28