如何解决图片上传错误“创建对象时发生类型错误” Magento 2.4.1
在我的自定义表单中,我有一个选项图片上传。没有图片上传表单提交没有任何错误。但是当我使用图片上传代码并提交我的表单时出现错误
创建对象时发生类型错误: MKF\CustomApplication\Controller\Index\Submit\Interceptor,参数 4 传递给 MKF\CustomApplication\Controller\Index\Submit::__construct() 必须实现接口 Magento\Framework\ObjectManagerInterface, 给定的 Magento\MediaStorage\Model\File\UploaderFactory 实例, 叫进来 C:\xampp\htdocs\magento_new\generated\code\MKF\CustomApplication\Controller\Index\Submit\Interceptor.PHP 第 14 行
namespace MKF\CustomApplication\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
use MKF\CustomApplication\Model\FormModel;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\App\Action\Action;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
class Submit extends Action
{
protected $resultPageFactory;
protected $FormModel;
//file upload
protected $_objectManager;
protected $_storeManager;
protected $_filesystem;
protected $_fileUploaderFactory;
public function __construct(
Context $context,PageFactory $resultPageFactory,FormModel $FormModel,\Magento\Framework\ObjectManagerInterface $objectManager,StoreManagerInterface $storeManager,\Magento\Framework\Filesystem $filesystem,\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory
)
{
$this->resultPageFactory = $resultPageFactory;
$this->FormModel = $FormModel;
$this->_objectManager = $objectManager;
$this->_storeManager = $storeManager;
$this->_filesystem = $filesystem;
$this->_fileUploaderFactory = $fileUploaderFactory;
parent::__construct($context);
}
public function execute()
{
// print_r($this->getRequest()->getPost());
// exit();
try {
$data = (array)$this->getRequest()->getPost();
//print_r($data); exit();
//print_r($file['owner_nid']['name']); exit();
$this->UploadImages();
if ($data) {
$model = $this->FormModel;
$model->setData($data);
$model->setData('owner_nid',$file['owner_nid']['name']);
$model->save();
$this->messageManager->addSuccessMessage(__("Data Saved Successfully."));
}
} catch (\Exception $e) {
$this->messageManager->addErrorMessage($e,__("We can\'t submit your request,Please try again."));
}
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$resultRedirect->setUrl($this->_redirect->getRefererUrl());
return $resultRedirect;
}
private function UploadImages(){
$files = $this->getRequest()->getFiles();
$mediaDir = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath();
$mediapath = $this->_mediaBaseDirectory = rtrim($mediaDir,'/');
if (isset($files['owner_nid']) && !empty($files['owner_nid']["name"])){
try {
$uploader = $this->_fileUploaderFactory->create(['fileId' => 'owner_nid']);
$uploader->setAllowedExtensions(['jpg','jpeg','gif','png']);
$uploader->setAlloWrenameFiles(true);
$uploader->setFilesdispersion(true);
$path = $mediapath . '/MKF/CustomApplication/';
$result = $uploader->save($path);
if (!$result) {
throw new LocalizedException(
__('File cannot be saved to path: $1',$path)
);
}
$imagePath = $path.$files['owner_nid']["name"];
}
catch (\Exception $e) {
$this->messageManager->addError(__($e->getMessage()));
}
//print_r($data['owner_nid'] = $imagePath); exit();
return $imagePath;
}
}
}
解决方法
建议切换到开发者模式,删除生成的文件夹
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。