I'm new to Magento, created a simple CRUD module, which have a name, description and logo columns, Name and description are saving to the DB without any problems, but I need help on how to upload an image. Here is my whole module file structure, and code of Save controller, Thanks everyone for helping me!
<?php
namespace Elogic\Vendors\Controller\Adminhtml\Vendors;
use Magento\Backend\App\Action;
class Save extends Action
{
/**
* @var \Elogic\Vendors\Model\Vendors
*/
protected $_model;
/**
* @param Action\Context $context
* @param \Elogic\Vendors\Model\Vendors $model
*/
public function __construct(
Action\Context $context,
\Elogic\Vendors\Model\Vendors $model
) {
parent::__construct($context);
$this->_model = $model;
}
/**
* {@inheritdoc}
*/
protected function _isAllowed()
{
return $this->_authorization->isAllowed('Elogic_Vendors::vendors_save');
}
/**
* Save action
*
* @return \Magento\Framework\Controller\ResultInterface
*/
public function execute()
{
$data = $this->getRequest()->getPostValue();
/** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
if ($data) {
/** @var \Elogic\Vendors\Model\Vendors $model */
$model = $this->_model;
$id = $this->getRequest()->getParam('id');
if ($id) {
$model->load($id);
}
$model->setData($data);
$this->_eventManager->dispatch(
'vendors_vendors_prepare_save',
['vendors' => $model, 'request' => $this->getRequest()]
);
try {
$model->save();
$this->messageManager->addSuccess(__('Vendor saved'));
$this->_getSession()->setFormData(false);
if ($this->getRequest()->getParam('back')) {
return $resultRedirect->setPath('*/*/edit', ['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 vendor'));
}
$this->_getSession()->setFormData($data);
return $resultRedirect->setPath('*/*/edit', ['entity_id' => $this->getRequest()->getParam('id')]);
}
return $resultRedirect->setPath('*/*/');
}
}
1 Answer 1
Uploading the product image in Magento 2
<?php
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Backend\App\Action;
protected $_fileUploaderFactory;
public function __construct(
\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory,
Action\Context $context
) {
$this->_fileUploaderFactory = $fileUploaderFactory;
parent::__construct($context);
}
public function execute(){
$uploader = $this->_fileUploaderFactory->create(['fileId' => 'image']);
$uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
$path = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)
->getAbsolutePath('images/');
$uploader->save($path);
}
I hope this will help. If you still find any difficulty please let me know
Explore related questions
See similar questions with these tags.