I am trying to install this extension. When I tried to run `php bin/magento setup:di:compile` command I got `Missed required argument resultPageFactory in parent::__construct call.` error.
How can I pass more arguments ? What is the solution ?
Here is Place.php
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Ccavenuepay\Controller\Ccavenuepay;
use Magento\Ccavenuepay\Controller\Ccavenuepay;
use Magento\Ccavenuepay\Helper\DataFactory;
use Magento\Checkout\Model\Type\Onepage;
use Magento\Framework\App\Action\Context;
use Magento\Framework\App\Response\Http;
use Magento\Framework\Json\Helper\Data as JsonHelper;
use Magento\Framework\DataObject;
use Magento\Framework\Registry;
use Magento\Payment\Model\IframeConfigProvider;
use Magento\Quote\Api\CartManagementInterface;
/**
* Class Place
*
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class Place extends Ccavenuepay {
/**
* @var \Magento\Quote\Api\CartManagementInterface
*/
protected $cartManagement;
/**
* @var \Magento\Framework\Event\ManagerInterface
*/
protected $eventManager;
/**
* @var \Magento\Checkout\Model\Type\Onepage
*/
protected $onepageCheckout;
/**
* @var \Magento\Framework\Json\Helper\Data
*/
protected $jsonHelper;
protected $logger;
/**
* @param Context $context
* @param Registry $coreRegistry
* @param DataFactory $dataFactory
* @param CartManagementInterface $cartManagement
* @param Onepage $onepageCheckout
* @param JsonHelper $jsonHelper
*/
public function __construct(
Context $context,
Registry $coreRegistry,
DataFactory $dataFactory,
CartManagementInterface $cartManagement,
Onepage $onepageCheckout,
\Magento\Checkout\Model\Session $csession,
JsonHelper $jsonHelper,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Sales\Model\OrderFactory $orderFactory,
\Magento\Ccavenuepay\Model\Ccavenuepay $ccavenuepay,
\Magento\Ccavenuepay\Helper\Checkout $checkoutHelper,
\Psr\Log\LoggerInterface $logger
) {
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
$this->logger = new \Zend\Log\Logger();
$this->logger->addWriter($writer);
$this->logger->info("Place extends Ccavenuepay=====");
$this->eventManager = $context->getEventManager();
$this->cartManagement = $cartManagement;
$this->onepageCheckout = $onepageCheckout;
$this->jsonHelper = $jsonHelper;
parent::__construct($context, $checkoutSession, $orderFactory, $ccavenuepay, $checkoutHelper, $logger);
}
/**
* Send request to authorize.net
*
* @return string
*/
public function execute() {
$this->logger->info("Place extends Ccavenuepay=====execute");
$paymentParam = $this->getRequest()->getParam('payment');
$controller = $this->getRequest()->getParam('controller');
$response = $this->getResponse();
if (isset($paymentParam['method'])) {
$this->_getDirectPostSession()->setQuoteId($this->_getCheckout()->getQuote()->getId());
/**
* Current workaround depends on Onepage checkout model defect
* Method Onepage::getCheckoutMethod performs setCheckoutMethod
*/
$this->onepageCheckout->getCheckoutMethod();
if ($controller == IframeConfigProvider::CHECKOUT_IDENTIFIER) {
return $this->placeCheckoutOrder();
}
$params = $this->dataFactory
->create(DataFactory::AREA_FRONTEND)
->getSaveOrderUrlParams($controller);
$this->_forward(
$params['action'], $params['controller'], $params['module'], $this->getRequest()->getParams()
);
} else {
$result = ['error_messages' => __('Please choose a payment method.'), 'goto_section' => 'payment'];
if ($response instanceof Http) {
$response->representJson($this->jsonHelper->jsonEncode($result));
}
}
}
/**
* Place order for checkout flow
*
* @return string
*/
protected function placeCheckoutOrder() {
$this->logger->info("Place extends Ccavenuepay=====placeCheckoutOrder");
$result = new DataObject();
$response = $this->getResponse();
try {
$this->cartManagement->placeOrder($this->_getCheckout()->getQuote()->getId());
$result->setData('success', true);
$this->eventManager->dispatch(
'checkout_ccavenuepay_placeOrder', [
'result' => $result,
'action' => $this
]
);
} catch (\Exception $exception) {
$result->setData('error', true);
$result->setData('error_messages', __('Cannot place order.'));
}
if ($response instanceof Http) {
$response->representJson($this->jsonHelper->jsonEncode($result));
}
}
}
Solved! Go to Solution.
Hi @foysal,
Please replace constructor code with below code:
public function __construct( Context $context, Registry $coreRegistry, DataFactory $dataFactory, CartManagementInterface $cartManagement, Onepage $onepageCheckout, \Magento\Checkout\Model\Session $csession, JsonHelper $jsonHelper, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Ccavenuepay\Model\Ccavenuepay $ccavenuepay, \Magento\Ccavenuepay\Helper\Checkout $checkoutHelper, \Psr\Log\LoggerInterface $logger,
\Magento\Framework\View\Result\PageFactory $resultPageFactory, \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\Sales\Model\Service\InvoiceService $invoiceService, \Magento\Framework\DB\Transaction $transaction, \Magento\Sales\Model\Order\Email\Sender\InvoiceSender $invoiceSender
){
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
$this->logger = new \Zend\Log\Logger();
$this->logger->addWriter($writer);
$this->logger->info("Place extends Ccavenuepay=====");
$this->eventManager = $context->getEventManager();
$this->cartManagement = $cartManagement;
$this->onepageCheckout = $onepageCheckout;
$this->jsonHelper = $jsonHelper;
parent::__construct($context, $checkoutSession,
$orderFactory, $ccavenuepay, $checkoutHelper, $logger,
$resultPageFactory,$orderRepository,$invoiceService,
$transaction,$invoiceSender);
Change in the file and run below commands again.
php bin/magento setup:upgrade
php bin/magento setup:di:compile
Hope this helps you!
Problem Solved! Click Kudos & Accept as Solution!
Hi @foysal
It may be possible some one fogot to inject the argument from the parent. $context and $data are mandatory
Please check with your file, and try to pass as below:
public function __construct(
\Magento\Framework\View\Element\Template\Context $context, // parent argument
......
array $data = [] // parent argument
) {
......
parent::__construct($context, $data);
}It may help!
Problem Solved? Please click on 'Kudos' & Accept as Solution!
Hi @foysal ,
Please check below controller file constructor
Magento\Ccavenuepay\Controller\Ccavenuepay
and cross check how many arguments are passed to the constructor.
As we are passing, 6 arguments to the parent constructor. Error shows there is mismatch in the parent constructor.
parent::__construct($context, $checkoutSession, $orderFactory, $ccavenuepay, $checkoutHelper, $logger);
Hope this helps you!
Problem Solved! Click Kudos & Accept as Solution!
Thanks @Nishu Jindal . Here is the Parent class Ccavenuepay.php .
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Ccavenuepay\Controller;
use Magento\Ccavenuepay\Helper\Data;
/**
* Payflow Checkout Controller
*/
abstract class Ccavenuepay extends \Magento\Framework\App\Action\Action {
/**
* @var \Magento\Checkout\Model\Session
*/
protected $_checkoutSession;
/**
* @var \Magento\Sales\Model\OrderFactory
*/
protected $_orderFactory;
/**
* @var \Psr\Log\LoggerInterface
*/
protected $_logger;
protected $logger;
/**
* @var \Magento\Ccavenuepay\Model\Ccavenuepay
*/
protected $_ccavenuepay;
/**
* @var \Magento\Ccavenuepay\Helper\Checkout
*/
protected $_checkoutHelper;
/**
* @var \Magento\Ccavenuepay\Helper\data
*/
protected $_ccavenuepayHelper;
/**
* Redirect block name
* @var string
*/
protected $_redirectBlockName = 'ccavenuepay.iframe';
/**
* @var \Magento\Sales\Api\OrderRepositoryInterface
*/
protected $_orderRepository;
/**
* @var \Magento\Sales\Model\Service\InvoiceService
*/
protected $_invoiceService;
/**
* @var \Magento\Framework\DB\Transaction
*/
protected $_transaction;
/**
* @var \Magento\Sales\Model\Order\Email\Sender\InvoiceSender
*/
protected $_invoiceSender;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Magento\Sales\Model\OrderFactory $orderFactory
* @param \Magento\Ccavenuepay\Model\PayflowlinkFactory $ccavenuepay
* @param \Magento\Ccavenuepay\Helper\Checkout $checkoutHelper
* @param \Psr\Log\LoggerInterface $logger
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Sales\Model\OrderFactory $orderFactory,
\Magento\Ccavenuepay\Model\Ccavenuepay $ccavenuepay,
\Magento\Ccavenuepay\Helper\Checkout $checkoutHelper,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
\Magento\Sales\Model\Service\InvoiceService $invoiceService,
\Magento\Framework\DB\Transaction $transaction,
\Magento\Sales\Model\Order\Email\Sender\InvoiceSender $invoiceSender
) {
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
$this->logger = new \Zend\Log\Logger();
$this->logger->addWriter($writer);
$this->_checkoutSession = $checkoutSession;
$this->_orderFactory = $orderFactory;
$this->_logger = $logger;
$this->_ccavenuepay = $ccavenuepay;
$this->_checkoutHelper = $checkoutHelper;
$this->_orderRepository = $orderRepository;
$this->_invoiceService = $invoiceService;
$this->_transaction = $transaction;
$this->_invoiceSender = $invoiceSender;
parent::__construct($context);
}
/**
* Cancel order, return quote to customer
*
* @param string $errorMsg
* @return false|string
*/
protected function _cancelPayment($errorMsg = '') {
$errorMsg = trim(strip_tags($errorMsg));
$gotoSection = false;
$this->_checkoutHelper->cancelCurrentOrder($errorMsg);
if ($this->_checkoutSession->restoreQuote()) {
//Redirect to payment step
$gotoSection = 'paymentMethod';
}
return $gotoSection;
}
public function errorAction() {
$this->_redirect('checkout/onepage/');
}
/**
* Check if email is registered at Moneybookers
*/
protected function _getCheckout() {
return $this->_objectManager->get('Magento\Checkout\Model\Session');
}
/**
* Get session model
*
* @return \Magento\Ccavenuepay\Model\Ccavenuepay\Session
*/
protected function _getCcavenuepayPostSession() {
return $this->_objectManager->get('Magento\Ccavenuepay\Model\Ccavenuepay\Session');
}
protected function _getHelper() {
return $this->_ccavenuepay->getHelper();
}
protected function _createInvoice($orderId)
{
$order = $this->_orderRepository->get($orderId);
if($order->canInvoice()) {
$invoice = $this->_invoiceService->prepareInvoice($order);
$invoice->setRequestedCaptureCase(\Magento\Sales\Model\Order\Invoice::CAPTURE_OFFLINE);
$invoice->register();
$invoice->getOrder()->setCustomerNoteNotify(false);
$invoice->getOrder()->setIsInProcess(true);
$invoice->save();
$transactionSave = $this->_transaction->addObject( $invoice )->addObject( $invoice->getOrder() );
$transactionSave->save();
$order->addStatusHistoryComment('Automatically INVOICED.', false)->save();
$this->_invoiceSender->send($invoice);
}
}
}
Could you please help me now ? What will be the code ? Thanks.
Hi @foysal,
Please replace constructor code with below code:
public function __construct( Context $context, Registry $coreRegistry, DataFactory $dataFactory, CartManagementInterface $cartManagement, Onepage $onepageCheckout, \Magento\Checkout\Model\Session $csession, JsonHelper $jsonHelper, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Ccavenuepay\Model\Ccavenuepay $ccavenuepay, \Magento\Ccavenuepay\Helper\Checkout $checkoutHelper, \Psr\Log\LoggerInterface $logger,
\Magento\Framework\View\Result\PageFactory $resultPageFactory, \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\Sales\Model\Service\InvoiceService $invoiceService, \Magento\Framework\DB\Transaction $transaction, \Magento\Sales\Model\Order\Email\Sender\InvoiceSender $invoiceSender
){
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
$this->logger = new \Zend\Log\Logger();
$this->logger->addWriter($writer);
$this->logger->info("Place extends Ccavenuepay=====");
$this->eventManager = $context->getEventManager();
$this->cartManagement = $cartManagement;
$this->onepageCheckout = $onepageCheckout;
$this->jsonHelper = $jsonHelper;
parent::__construct($context, $checkoutSession,
$orderFactory, $ccavenuepay, $checkoutHelper, $logger,
$resultPageFactory,$orderRepository,$invoiceService,
$transaction,$invoiceSender);
Change in the file and run below commands again.
php bin/magento setup:upgrade
php bin/magento setup:di:compile
Hope this helps you!
Problem Solved! Click Kudos & Accept as Solution!
Thanks @Nishu Jindal . Your solution is working. Thanks.