Fatal error: Uncaught TypeError: Argument 1 passed to MyModule\Service\Controller\Module\Version::__construct() must be an instance of Magento\Framework\App\Action\Context, instance of Magento\Framework\ObjectManager\ObjectManager given, called in /srv/www/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php on line 93 and defined in /srv/www/app/code/MyModule/Service/Controller/Module/version.php:16
出现这种情况我编译运行此命令后:当我尝试运行我的Magento 2模块以下错误
magento setup:di:compile
我看过很多帖子说建议您清除了/ var/di和/ var/generation文件夹,同时修复了只能在开发环境中工作的错误。我无法在生产环境中清除这些文件夹,因为这会导致其他扩展程序中断。
这是我的控制器:
namespace MyModule\Service\Controller\Module;
class Version extends \MyModule\Service\Controller\Module {
protected $resultJsonFactory;
protected $objectManager;
protected $helper = null;
protected $config = null;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
* @param \MyModule\Service\Helper\Data $helper
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
\MyModule\Service\Helper\Data $helper
) {
$this->resultJsonFactory = $resultJsonFactory;
$this->helper = $helper;
$this->objectManager = $context->getObjectManager();
parent::__construct($context);
parent::initParams();
}
/**
* @return \Magento\Framework\Controller\Result\Json
*/
public function execute()
{
$result = $this->resultJsonFactory->create();
$data = new \stdClass();
$data->magentoVersion = (string) $this->objectManager->get('\Magento\Framework\App\ProductMetadata')->getVersion();
$data->phpVersion = (string) phpversion();
$data->moduleEnabled = $this->helper->getConfig()['enabled'];
$data->apiVersion = "2.0";
return $result->setData($data);
}
}
而这就是我对MyModule的\服务\控制器
namespace MyModule\Service\Controller;
abstract class Module extends \Magento\Framework\App\Action\Action {
protected $pageSize = null;
protected $pageNum = 0;
protected $startDate = null;
protected $endDate = null;
protected $sortDir = 'asc';
protected $filterField = 'created_at';
protected $id = null;
protected $helper;
protected function initParams() {
if ((bool) $pageSize = $this->getRequest()->getParam('page_size')) {
$this->pageSize = $pageSize;
}
if ((bool) $pageNum = $this->getRequest()->getParam('page_num')) {
$this->pageNum = $pageNum;
}
if ((bool) $startDate = $this->getRequest()->getParam('start_date')) {
$this->startDate = $startDate;
if ((bool) $endDate = $this->getRequest()->getParam('end_date')) {
$this->endDate = $endDate;
} else {
$this->endDate = date('Y-m-d');
}
} elseif ((bool) $updatedStartDate = $this->getRequest()->getParam('updated_start_date')) {
$this->filterField = 'updated_at';
$this->startDate = $updatedStartDate;
if ((bool) $updatedEndDate = $this->getRequest()->getParam('updated_end_date')) {
$this->endDate = $updatedEndDate;
} else {
$this->endDate = date('Y-m-d');
}
}
if ((bool) $sortDir = $this->getRequest()->getParam('sort_dir')) {
$this->sortDir = $sortDir;
}
if ((bool) $id = $this->getRequest()->getParam('id')) {
$this->id = $id;
}
}
protected function isEnabled() {
return $this->helper->getConfig()['enabled'];
}
protected function isAuthorized() {
$token = $this->helper->getConfig()['security_token'];
$authToken = (isset($_SERVER['HTTP_X_TOKEN']) ? $_SERVER['HTTP_X_TOKEN'] : $_SERVER['X_TOKEN']);
if (empty($authToken)) {
return false;
}
if (trim($token) != trim($authToken)) {
$this->helper->log('feed request with invalid security token');
return false;
}
return true;
}
}
我自己在这里问了一个类似的问题:http://magento.stackexchange.com/q/144118/24432但到目前为止我没有解决方案。如果你找到一个,请告诉我。 – peedee