J'ai récemment implémenté le composant FileUploader Ui sous ma forme sur Magento 2.1.7.
Le code correspondant est ici ( 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>
Mon contrôleur est le suivant ( application / code / fournisseur / blog / contrôleur / 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);
}
}
Cependant, lorsque je télécharge une image et inspecte l'appel dans la console de Chrome, j'obtiens une erreur 500 avec exception: le tableau $ _FILES est vide .
Je me bats depuis deux jours mais je n'arrive pas à faire fonctionner correctement. Lorsque je décommente la $path
ligne de variable alternative , le téléchargement réussit mais je n'obtiens pas d'aperçu.
J'ai lu que c'était peut-être le enctype
formulaire à l'origine du problème, mais je n'ai trouvé aucune information sur la façon de vérifier cela pour un formulaire de composant d'interface utilisateur.
Si vous avez besoin de tout le code d'exception, faites-le moi savoir.
J'apprécie chaque aide possible. Je vous remercie!
la source
Réponses:
Je suive ces étapes pour ajouter le composant UI fileuploader sous forme d'administration
J'utilise le composant UI fileuploader pour télécharger une icône pour mon extension FAQ. Vous pouvez prendre référence à partir d'ici: https://github.com/mageprince/magento2-FAQ
1) Ajouter un champ dans
admin_form.xml
(Formulaire Admin)2) Maintenant, nous devons créer un contrôleur que nous définissons sous
uploaderConfig
forme d'administration:<item name="url" xsi:type="url" path="vendor_module/faqgroup/upload"/>
3) Créer
ImageUploader.php
4) Créer
image-preview.html
5) Ajoutez maintenant des arguments pour
ImageUploader.php
dans di.xmlVérifiez ce fichier pour charger l'image téléchargée sur le formulaire d'édition: DataProvider.php
PRODUCTION:
Pour enregistrer l'image dans la base de données
Pour afficher l'image téléchargée dans la page d'édition du formulaire:
la source
Supplément pour le composant Magento 2.2 UI
Comparer avec Magento 2.1, dans Magento 2.2 , le composant UI avait quelques différences optionnelles comme ci-dessous. Nous pourrions utiliser l'officiel
Magento_Catalog/image-preview
comme modèle de prévisualisation, et le reste des codes comme contrôleur pourrait faire référence à la réponse acceptée .la source
TypeError: value.map is not a function
. Comment puis-je résoudre ce problème