Niedawno wdrożyłem komponent interfejsu użytkownika FileUploader w mojej formie na Magento 2.1.7.
Kod do tego jest tutaj ( 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>
Mój kontroler to: ( aplikacja / kod / dostawca / blog / kontroler / 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);
}
}
Jednak po przesłaniu obrazu i sprawdzeniu połączenia w konsoli Chrome pojawia się błąd 500 z wyjątkiem: tablica $ _FILES jest pusta .
Walczę od dwóch dni, ale nie mogę tego zrobić. Kiedy odkomentuję zastępcę$path
linię zmiennej, przesyłanie się powiedzie, ale nie otrzymuję podglądu.
Czytałem, że to może być enctype
formularz, ale nie znalazłem żadnych informacji, jak to sprawdzić w przypadku formularza składnika interfejsu użytkownika.
Jeśli potrzebujesz całego kodu wyjątku, daj mi znać.
Doceniam każdą możliwą pomoc. Dziękuję Ci!
źródło
Odpowiedzi:
Wykonuję te kroki, aby dodać komponent UUP Fileuploader w formie administratora
Używam komponentu Fileuploader interfejsu użytkownika do przesłania ikony mojego rozszerzenia FAQ. Możesz odwołać się tutaj: https://github.com/mageprince/magento2-FAQ
1) Dodaj pole w
admin_form.xml
(Formularzu administratora)2) Teraz musimy utworzyć kontroler, który zdefiniujemy w
uploaderConfig
formie administratora:<item name="url" xsi:type="url" path="vendor_module/faqgroup/upload"/>
3) Utwórz
ImageUploader.php
4) Utwórz
image-preview.html
5) Teraz dodaj argumenty do
ImageUploader.php
pliku di.xmlSprawdź ten plik pod kątem załadowanego obrazu w formularzu edycji: DataProvider.php
WYNIK:
Aby zapisać obraz w bazie danych
Aby wyświetlić przesłane zdjęcie w formie strony edycji:
źródło
Suplement do komponentu Magento 2.2 UI
Porównaj z Magento 2.1, w Magento 2.2 The składnik UI miał jakieś ewentualne różnice jak poniżej. Możemy użyć oficjalnej
Magento_Catalog/image-preview
jako templete podglądu, a pozostałe kody, takie jak kontroler, mogą odnosić się do zaakceptowanej odpowiedzi .źródło
TypeError: value.map is not a function
. Jak mogę to naprawić