Magento 2: Как использовать инъекцию конструктора в Contoller
У меня есть следующий код контроллера, который отлично работает с помощью диспетчера объектов. Как я могу использовать для этого инъекцию конструктора вместо диспетчера объектов?
namespace Amit\Qr\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action
{
/** @var \Magento\Framework\View\Result\PageFactory */
protected $resultPageFactory;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory
) {
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
public function execute()
{
$orderId = $this->getRequest()->getParam('order_id');
$order = $this->_objectManager->create('Magento\Sales\Model\Order');
$order->load($orderId);
$customerId = $order->getCustomerId();
echo $customerId;
//.....
}
}
1
2 answers
Просто переместите все зависимости в конструктор
class Index extends \Magento\Framework\App\Action\Action
{
/** @var \Magento\Framework\View\Result\PageFactory */
protected $resultPageFactory;
private $orderFactory;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Magento\Sales\Model\OrderFactory $orderFactory
) {
$this->resultPageFactory = $resultPageFactory;
$this->orderFactory = $orderFactory;
parent::__construct($context);
}
public function execute()
{
$orderId = $this->getRequest()->getParam('order_id');
$order = $this->orderFactory->create();
$order->load($orderId);
$customerId = $order->getCustomerId();
echo $customerId;
//.....
}
}
Следующим шагом будет использование сервисов:
class Index extends \Magento\Framework\App\Action\Action
{
/** @var \Magento\Framework\View\Result\PageFactory */
protected $resultPageFactory;
/** @var \Magento\Sales\Model\OrderRepository */
private $orderRepository;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Magento\Sales\Model\OrderRepository $orderRepository
) {
$this->resultPageFactory = $resultPageFactory;
$this->orderRepository = $orderRepository;
parent::__construct($context);
}
public function execute()
{
$orderId = $this->getRequest()->getParam('order_id');
$order = $this->orderRepository->get($orderId);
$customerId = $order->getCustomerId();
echo $customerId;
//.....
}
}
5
Author: KAndy, 2016-03-20 07:50:10
Вы должны ввести порядок моделей по Фабрикам
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Sales\Model\OrderFactory $orderFactory
.....another injection......
) {
$this->orderFactory = $orderFactory;
....
parent::__construct($context);
}
public function execute() {
$order = $this->orderFactory->create(); // Use Factory to create instance order model object
}
Старайтесь избегать прямого использования _objectManager
, насколько это возможно
2
Author: mrtuvn, 2016-03-20 08:01:13