Как отобразить изображение на странице редактирования в бэкэнде в Magento 2?


Я создал пользовательскую сетку в серверной части magento 2, пользователь может вставлять значения из серверной части и внешнего интерфейса. Я также загрузил изображения в базу данных. Теперь мой запрос заключается в том, что я хочу отобразить изображение на странице редактирования.

Like this

Save.php

<?php
namespace Contact\Modules\Controller\Adminhtml\ContactGrid;
use Magento\Framework\App\Filesystem\DirectoryList;
class Save extends \Magento\Backend\App\Action
{
    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    public function execute()
    {

        $data = $this->getRequest()->getParams();
        if ($data) {
            $model = $this->_objectManager->create('Contact\Modules\Model\Contact');

             if(isset($_FILES['photo']['name']) && $_FILES['photo']['name'] != '') {
                try {
                        $uploader = $this->_objectManager->create('Magento\MediaStorage\Model\File\Uploader', array('fileId' => 'photo'));
                        $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png'));
                        $uploader->setAllowRenameFiles(true);
                        $uploader->setFilesDispersion(true);
                        $mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')
                            ->getDirectoryRead(DirectoryList::MEDIA);
                        $result = $uploader->save($mediaDirectory->getAbsolutePath('Contact/Modules/images'));
                        unset($result['tmp_name']);
                        unset($result['path']);
                                                $path = 'Contact/Modules/images';
                        $data['photo'] = $path.$result['file'];
                } catch (Exception $e) {
                    $data['photo'] = $_FILES['photo']['name'];
                }
            }
            else{
                if(empty($data['photo']['value']))
                                {
                                    $data['photo'] = "No Photo available";
                                }
            } 
            $id = $this->getRequest()->getParam('id');
            if ($id) {
                $model->load($id);
            }

            $model->setData($data);

            try {
                $model->save();
                $this->messageManager->addSuccess(__('The Frist Grid Has been Saved.'));
                $this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false);
                if ($this->getRequest()->getParam('back')) {
                    $this->_redirect('*/*/edit', array('id' => $model->getId(), '_current' => true));
                    return;
                }
                $this->_redirect('*/*/');
                return;
            } catch (\Magento\Framework\Model\Exception $e) {
                $this->messageManager->addError($e->getMessage());
            } catch (\RuntimeException $e) {
                $this->messageManager->addError($e->getMessage());
            } catch (\Exception $e) {
                $this->messageManager->addException($e, __('Something went wrong while saving the banner.'));
            }

            $this->_getSession()->setFormData($data);
            $this->_redirect('*/*/edit', array('banner_id' => $this->getRequest()->getParam('banner_id')));
            return;
        }
        $this->_redirect('*/*/');
    }
}

Edit.php

<?php
namespace Contact\Modules\Controller\Adminhtml\ContactGrid;

class Edit extends \Magento\Backend\App\Action
{
    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    public function execute()
    {


        // 1. Get ID and create model
        $id = $this->getRequest()->getParam('id');


        $model = $this->_objectManager->create('Contact\Modules\Model\Contact');

        $registryObject = $this->_objectManager->get('Magento\Framework\Registry');

        // 2. Initial checking
        if ($id) {
            $model->load($id);
            if (!$model->getId()) {
                $this->messageManager->addError(__('This row no longer exists.'));
                $this->_redirect('*/*/');
                return;
            }
        }
        // 3. Set entered data if was error when we do save
        $data = $this->_objectManager->get('Magento\Backend\Model\Session')->getFormData(true);
        if (!empty($data)) {
            $model->setData($data);
        }
        $registryObject->register('modules_contact', $model);
        $this->_view->loadLayout();
        $this->_view->getLayout()->initMessages();
        $this->_view->renderLayout();
    }
}

Contact.php

<?php
namespace Contact\Modules\Block\Adminhtml\Contact\Edit\Tab;
class Contact extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
{
    /**
     * @var \Magento\Store\Model\System\Store
     */
    protected $_systemStore;

    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param \Magento\Framework\Data\FormFactory $formFactory
     * @param \Magento\Store\Model\System\Store $systemStore
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\Data\FormFactory $formFactory,
        \Magento\Store\Model\System\Store $systemStore,
        array $data = array()
    ) {
        $this->_systemStore = $systemStore;
        parent::__construct($context, $registry, $formFactory, $data);
    }

    /**
     * Prepare form
     *
     * @return $this
     */
    protected function _prepareForm()
    {
        /* @var $model \Magento\Cms\Model\Page */
        $model = $this->_coreRegistry->registry('modules_contact');
        $isElementDisabled = false;
        /** @var \Magento\Framework\Data\Form $form */
        $form = $this->_formFactory->create();

        $form->setHtmlIdPrefix('page_');

        $fieldset = $form->addFieldset('base_fieldset', array('legend' => __('Contact')));

        if ($model->getId()) {
            $fieldset->addField('id', 'hidden', array('name' => 'id'));
        }

        $fieldset->addField(
            'email',
            'text',
            array(
                'name' => 'email',
                'label' => __('Email'),
                'title' => __('Email'),
                /*'required' => true,*/
            )
        );
        $fieldset->addField(
            'subject',
            'text',
            array(
                'name' => 'subject',
                'label' => __('Subject'),
                'title' => __('Subject'),
                /*'required' => true,*/
            )
        );

                 $fieldset->addField(
            'gender',
            'radios',
            array(
                'name' => 'gender',
                'label' => __('Gender'),
                'title' => __('Gender'),
                'values' => array(
                            array('value'=>'Male','label'=>'Male'),
                            array('value'=>'Female','label'=>'Female'),
                           ),
                /*'required' => true,*/
            )
        );
                     $fieldset->addField(
            'city',
            'select',
            [
                'label' => __('City'),
                'title' => __('City'),
                'name' => 'city',
                'required' => true,
                'options' => ['Bikaner' => __('Bikaner'), 'Jodhpur' => __('Jodhpur'), 'Jaipur' => __('Jaipur'), 'Kota' => __('Kota')]
            ]
        );
        $fieldset->addField(
            'photo',
            'file',
            array(
                'name' => 'photo',
                'label' => __('Photo'),
                'title' => __('Photo'),
                /*'required' => true,*/
            )
        );
                $fieldset->addField(
            'message',
            'textarea',
            array(
                'name' => 'message',
                'label' => __('Message'),
                'title' => __('Message'),
                /*'required' => true,*/
            )
        );
        /*{{CedAddFormField}}*/

        if (!$model->getId()) {
            $model->setData('status', $isElementDisabled ? '2' : '1');
        }

        $form->setValues($model->getData());
        $this->setForm($form);

        return parent::_prepareForm();   
    }

    /**
     * Prepare label for tab
     *
     * @return string
     */
    public function getTabLabel()
    {
        return __('Contact');
    }

    /**
     * Prepare title for tab
     *
     * @return string
     */
    public function getTabTitle()
    {
        return __('Contact');
    }

    /**
     * {@inheritdoc}
     */
    public function canShowTab()
    {
        return true;
    }

    /**
     * {@inheritdoc}
     */
    public function isHidden()
    {
        return false;
    }

    /**
     * Check permission for passed action
     *
     * @param string $resourceId
     * @return bool
     */
    protected function _isAllowedAction($resourceId)
    {
        return $this->_authorization->isAllowed($resourceId);
    }
}

Из save.php я могу сохранить изображение.

 3
Author: Qaisar Satti, 2016-10-05

2 answers

Тип поля должен быть image не файл. чтобы отобразить изображение по умолчанию

$fieldset->addField(
            'photo',
            'image',
            array(
                'name' => 'photo',
                'class' =>'admin__control-image',
                'label' => __('Photo'),
                'title' => __('Photo'),
                /*'required' => true,*/
            )
        );
 3
Author: Qaisar Satti, 2016-10-05 10:11:59

Добавьте код ниже в модуль Main.php

$fieldset->addField(
    'photo',
    'image',
    [
        'name' => 'photo',
        'label' => __('Image'),
        'title' => __('Image'),
        'required' => true
    ]
);

Добавьте код ниже в модуль Save.php

public function execute()
{

    $image = $this->getRequest()->getFiles();
    $data = $this->getRequest()->getPostValue();

    /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
    $resultRedirect = $this->resultRedirectFactory->create();

    if ($data) {

        if($image['photo']['name'] == '' && $data['photo']['value'] == ''){
            $this->messageManager->addError(__('Please Upload Slide Image.'));
            return $resultRedirect->setPath('*/*/edit', ['banner_id' => $this->getRequest()->getParam('banner_id')]);
        }

        $model = $this->_objectManager->create('Contact\Modules\Model\Contact');


        $id = $this->getRequest()->getParam('banner_id');
        if ($id) {
            $model->load($id);
        }

        $path = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath('banner/');

        if(isset($data['photo']['delete'])){
            unlink($this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath('/').$data['photo']['value']);
            $data['photo'] = '';
        }else if($image['photo']['name'] != ''){

            // Save Image
            $uploader = $this->_fileUploaderFactory->create(['fileId' => $image['photo']]);
            $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
            $uploader->setAllowRenameFiles(true);
            $uploader->save($path);

            $fileName = $uploader->getUploadedFileName();
            if ($fileName) {
                $data['photo'] = 'banner/'.$fileName;
            }
            // Save Image
        }else{
            $data['photo'] = $data['photo']['value'];
        }


        $model->setData($data);

        try {
            $model->save();
            $this->messageManager->addSuccess(__('The slide has been saved.'));
            $this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false);
            if ($this->getRequest()->getParam('back')) {
                return $resultRedirect->setPath('*/*/edit', ['banner_id' => $model->getId(), '_current' => true]);
            }
            return $resultRedirect->setPath('*/*/');
        } catch (\Magento\Framework\Exception\LocalizedException $e) {
            $this->messageManager->addError($e->getMessage());
        } catch (\RuntimeException $e) {
            $this->messageManager->addError($e->getMessage());
        } catch (\Exception $e) {
            $this->messageManager->addException($e, __('Something went wrong while saving the slide.'));
        }

        $this->_getSession()->setFormData($data);
        return $resultRedirect->setPath('*/*/edit', ['banner_id' => $this->getRequest()->getParam('banner_id')]);
    }
    return $resultRedirect->setPath('*/*/');
}

Примечание: Нет необходимости требовать других изменений файлов.

 0
Author: Suresh Chikani, 2016-10-05 10:16:37