Magento 2: How to Improve Code In Magento (PHP)?
-
08-03-2021 - |
Domanda
I'm new to Magento just, I'm working on an event I call many files through object manager, but I know that's not a good way, I have a chunk of code just need to know how can I improve it.
CustomerAddress\Attribute\Observer
<?php
namespace CustomerAddress\Attribute\Observer;
use Magento\Framework\Event\ObserverInterface;
class AfterPlaceObserver implements ObserverInterface
{
protected $addressRepository;
protected $addressFactory;
protected $checkoutSession;
protected $orderFactory;
protected $jsonHelper;
public function __construct(
\Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
\Magento\Customer\Model\AddressFactory $addressFactory,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Sales\Model\OrderFactory $orderFactory,
\Magento\Framework\Json\Helper\Data $jsonHelper
) {
$this->addressRepository = $addressRepository;
$this->addressFactory = $addressFactory;
$this->checkoutSession = $checkoutSession;
$this->orderFactory = $orderFactory;
$this->jsonHelper = $jsonHelper;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
// $addressRepository = $objectManager->create('\Magento\Customer\Api\AddressRepositoryInterface');
// $addressFactory = $objectManager->create('\Magento\Customer\Model\AddressFactory');
// $checkoutSession = $objectManager->create('\Magento\Checkout\Model\Session');
// $orderFactory = $objectManager->create('\Magento\Sales\Model\OrderFactory');
// $jsonHelper = $objectManager->create('\Magento\Framework\Json\Helper\Data');
$orderIncrementId = $checkoutSession->getLastRealOrderId();
$orderInfo = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($orderIncrementId);
$bssCustomfield = $orderInfo->getBssCustomfield();
$jsonBssCustomfield = $jsonHelper->jsonDecode($bssCustomfield);
$jsonTaxExemptNumber = $jsonBssCustomfield['tax_exempt_number']['value'];
$addressRepository = $objectManager->create('\Magento\Customer\Api\AddressRepositoryInterface');
$addressObject = $addressRepository->getById($orderInfo->getShippingAddress()->getCustomerAddressId());
$addressObject->setCustomAttribute('customer_tax_exempt_number', $jsonTaxExemptNumber);
$addressRepository->save($addressObject);
}
}
Soluzione
Without Object Manager Your Code is Look Like This :-
<?php
namespace CustomerAddress\Attribute\Observer;
use Magento\Framework\Event\ObserverInterface;
class AfterPlaceObserver implements ObserverInterface
{
protected $addressRepository;
protected $addressFactory;
protected $checkoutSession;
protected $order;
protected $jsonHelper;
public function __construct(
\Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
\Magento\Customer\Model\AddressFactory $addressFactory,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Sales\Model\Order $order,
\Magento\Framework\Json\Helper\Data $jsonHelper
) {
$this->addressRepository = $addressRepository;
$this->addressFactory = $addressFactory;
$this->checkoutSession = $checkoutSession;
$this->order = $order;
$this->jsonHelper = $jsonHelper;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$orderIncrementId = $this->checkoutSession->getLastRealOrderId();
$orderInfo = $this->order->loadByIncrementId($orderIncrementId);
$bssCustomfield = $orderInfo->getBssCustomfield();
$jsonBssCustomfield = $this->jsonHelper->jsonDecode($bssCustomfield);
$jsonTaxExemptNumber = $jsonBssCustomfield['tax_exempt_number']['value'];
$addressRepository = $this->addressRepository;
$addressObject = $addressRepository->getById($orderInfo->getShippingAddress()->getCustomerAddressId());
$addressObject->setCustomAttribute('customer_tax_exempt_number', $jsonTaxExemptNumber);
$addressRepository->save($addressObject);
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange