Magento 2.1.5 добавить атрибут продукта программно не работает
Я хочу создать атрибут программно. Я протестировал несколько кодов, но все они не работают для меня.
Вот мои шаги:
-
Создать InstallData.php файл с кодом, подобным приведенному ниже.
- В InstallData.php мой PhpStorm выделяет "неопределенный класс Подслушивающая установка"
-
Я использую команду в корневой папке magento "php bin/настройка magento: обновление". -
- В InstallData.php мой PHP-шторм выделяет "неопределенный класс EavSetupFactory"
- После этого я вижу "Пожалуйста, повторите команду компиляции Magento"
- Я проверил панель администратора, там нет новых атрибутов
-
Следующим шагом я использую "php bin/настройка magento:di:компиляция".
- В - InstallData.php теперь все в порядке, нет связи с "неопределенным классом EavSetupFactory"я могу перенаправить в этот класс
- Проверьте панель администратора, по-прежнему нет атрибутов
-
Снова используйте "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' => ''
]
);
}
}
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
.