2016-11-22 140 views
4

我得到Magento 2:传递给Controller :: __ construct()的参数1必须是.. .. .. Action Context的实例.. .. .. .. .. .. .. ObjectManager的实例给出

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; 
    } 
} 
+0

我自己在这里问了一个类似的问题:http://magento.stackexchange.com/q/144118/24432但到目前为止我没有解决方案。如果你找到一个,请告诉我。 – peedee

回答

0

尝试删除旧的生成使用RM -rf VAR /生成的文件/ *来自magento根目录的命令,因为magento预先生成具有构造函数的所有类文件。生成的类扩展了原始类,并由magento使用来调用插件。

相关问题