Недавно я реализовал компонент FileUploader Ui в своей форме на Magento 2.1.7.
Код для этого здесь ( app / code / Vendor / Blog / view / adminhtml / ui_component / vendor_blog_form.xml ):
<field name="featured_images">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">text</item>
<item name="label" translate="true" xsi:type="string">Hervorgehobene Bilder:</item>
<item name="formElement" xsi:type="string">fileUploader</item>
<item name="componentType" xsi:type="string">fileUploader</item>
<item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item>
<item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
<item name="allowedExtensions" xsi:type="string">jpg jpeg gif png</item>
<item name="notice" xsi:type="string" translate="true">Erlaubte Dateitypen: png, gif, jpg, jpeg.</item>
<item name="maxFileSize" xsi:type="number">2097152</item>
<item name="source" xsi:type="string">blog</item>
<item name="sortOrder" xsi:type="number">10</item>
<item name="dataScope" xsi:type="string">featured_images</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">false</item>
</item>
<item name="uploaderConfig" xsi:type="array">
<item name="url" xsi:type="url" path="vendor_blog/blog/upload"/>
</item>
</item>
</argument>
</field>
Мой Контроллер для него это ( app / code / Vendor / Blog / Controller / Adminhtml / Blog / Upload.php ):
<?php
namespace Vendor\Blog\Controller\Adminhtml\Blog;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Backend\App\Action;
class Upload extends \Vendor\Blog\Controller\Adminhtml\Blog
{
protected $_fileUploaderFactory;
protected $_directory_list;
protected $_logger;
public function __construct(
Action\Context $context,
\Magento\Framework\Registry $coreRegistry,
\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory,
\Magento\Framework\App\Filesystem\DirectoryList $directory_list,
\Psr\Log\LoggerInterface $logger
) {
$this->_fileUploaderFactory = $fileUploaderFactory;
$this->_directory_list = $directory_list;
$this->_logger = $logger;
parent::__construct($context, $coreRegistry);
}
public function execute(){
$uploader = $this->_fileUploaderFactory->create(['fileId' => 'featured_images']);
$uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
$path = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath('blog');
//$path = $this->_directory_list->getPath('media') . '/blog';
$this->_logger->debug('Uploader.php: '.$path);
$uploader->save($path);
}
}
Однако, когда я загружаю изображение и проверяю вызов в консоли Chrome, я получаю ошибку 500 с исключением: массив $ _FILES пуст .
Я борюсь в течение двух дней, но я не могу заставить его работать правильно. Когда я раскомментирую $path
строку альтернативной переменной, загрузка завершится успешно, но я не получу предварительный просмотр.
Я читал, что это может быть enctype
форма, которая вызывает проблему, но я не нашел никакой информации о том, как проверить это для формы компонента пользовательского интерфейса.
Если вам нужен полный код исключения, пожалуйста, дайте мне знать.
Я ценю любую возможную помощь. Спасибо!
источник
Ответы:
Я следую за этими шагами, чтобы добавить UI fileuploader компонент в форме администратора
Я использую компонент fileuploader пользовательского интерфейса, чтобы загрузить значок для моего расширения FAQ. Вы можете взять ссылку здесь: https://github.com/mageprince/magento2-FAQ
1) Добавить поле в
admin_form.xml
(Форма администратора)2) Теперь нам нужно создать контроллер, который мы определяем в
uploaderConfig
форме администратора:<item name="url" xsi:type="url" path="vendor_module/faqgroup/upload"/>
3) Создать
ImageUploader.php
4) Создать
image-preview.html
5) Теперь добавьте аргументы для
ImageUploader.php
в di.xmlПроверьте этот файл для загрузки загруженного изображения в форму редактирования: DataProvider.php
ВЫХОД:
Сохранить изображение в базе данных
Чтобы показать загруженное изображение на странице редактирования формы:
источник
Дополнение для Magento 2.2 UI компонента
Сравните с Magento 2.1, в Magento 2.2 , то компонент пользовательского интерфейса имел некоторые дополнительные различия как показано ниже. Мы могли бы использовать официальное в
Magento_Catalog/image-preview
качестве шаблона для предварительного просмотра, а остальные коды, такие как контроллер, могут ссылаться на принятый ответ .источник
TypeError: value.map is not a function
. Как я могу это исправить