Recientemente implementé el componente de interfaz de usuario FileUploader en mi formulario en Magento 2.1.7.
El código para esto está aquí ( 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>
Mi controlador para esto es este ( 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);
}
}
Sin embargo, cuando subo una imagen e inspecciono la llamada en la consola de Chrome, aparece un error 500 con excepción: la matriz $ _FILES está vacía .
Estoy luchando durante dos días, pero no puedo hacer que funcione correctamente. Cuando descomento la $path
línea de variable alternativa , la carga se realiza correctamente pero no obtengo una vista previa.
Leí que podría ser el enctype
formulario que está causando el problema, pero no encontré ninguna información sobre cómo verificar esto para un formulario de Componente de IU.
Si necesita el código de excepción completo, hágamelo saber.
Agradezco toda ayuda posible. ¡Gracias!
fuente
Respuestas:
Sigo estos pasos para agregar el componente UI fileuploader en forma de administrador
Utilizo el componente UI fileuploader para cargar un icono para mi extensión de preguntas frecuentes. Puede tomar referencia desde aquí: https://github.com/mageprince/magento2-FAQ
1) Agregar campo en
admin_form.xml
(Formulario de administrador)2) Ahora necesitamos crear un controlador que definimos en
uploaderConfig
forma de administrador:<item name="url" xsi:type="url" path="vendor_module/faqgroup/upload"/>
3) Crear
ImageUploader.php
4) Crear
image-preview.html
5) Ahora agregue argumentos para
ImageUploader.php
en di.xmlVerifique este archivo para cargar la imagen cargada en el formulario de edición: DataProvider.php
SALIDA:
Para guardar la imagen en la base de datos
Para mostrar la imagen cargada en la página de edición de formulario:
fuente
Suplemento para el componente Magento 2.2 UI
Compare con Magento 2.1, en Magento 2.2 , el componente UI tenía algunas diferencias opcionales como las siguientes. Podríamos hacer uso del
Magento_Catalog/image-preview
templo oficial como vista previa, y el resto de códigos como controlador podrían referirse a la respuesta aceptada .fuente
TypeError: value.map is not a function
. ¿Cómo puedo solucionarlo?