I could use a little guidance on writing a plugin for the Magento\Shipping\Model\Shipping->collectRates function. I have properly added the plugin to the di.xml and it's processing the around code. The trouble is, I'm getting an ObjectManager exception when running the proceed callback. At this point in the development of the plugin, I'm just trying to get the proceed to work, then I can add in the other features to my plugin.
Any ideas on what I'm doing wrong? Any help would be appreciated.
Magento Version: 2.1.6
Exception Message
Notice: Undefined index: instance in vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php on line 112
Plugin Class
class ShippingPlugin {
protected $shippingDataBuilder = null;
protected $overrideFactory = null;
protected $logger = null;
public function __construct(
Builder $shippingDataBuilder,
Factory $overrideFactory,
\Psr\Log\LoggerInterface $logger)
{
$this->shippingDataBuilder = $shippingDataBuilder;
$this->overrideFactory = $overrideFactory;
$this->logger = $logger;
}
public function aroundCollectRates(\Magento\Shipping\Model\Shipping $subject, callable $proceed, \Magento\Quote\Model\Quote\Address\RateRequest $rateRequest){
try {
$results = $proceed($rateRequest);
}
catch (\Exception $e){
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
return $results;
}
}
di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Shipping\Model\Shipping">
<plugin name="PluginName" type="\Company\Module\Plugin\ShippingPlugin" sortOrder="1" />
</type>
</config>
Exception Stack Trace
My Plugin around function is line #21 in the trace
main.ERROR: Notice: Undefined index: instance in vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php on line 112 [] []
main.ERROR: #0 vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(112): Magento\Framework\App\ErrorHandler->handler(8, 'Undefined index...', '/var/httpd/company...', 112, Array)
#1 vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(53): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Magento\\Framewo...', NULL, 'context', 'Magento\\Directo...')
#2 vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(82): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Magento\\Directo...', Array, Array)
#3 vendor/magento/framework/ObjectManager/ObjectManager.php(71): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Directo...')
#4 vendor/magento/framework/Model/AbstractModel.php(475): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Directo...')
#5 vendor/magento/framework/Model/AbstractModel.php(214): Magento\Framework\Model\AbstractModel->_getResource()
#6 vendor/magento/module-directory/Model/Country.php(72): Magento\Framework\Model\AbstractModel->_init('Magento\\Directo...')
#7 vendor/magento/framework/Model/AbstractModel.php(193): Magento\Directory\Model\Country->_construct()
#8 vendor/magento/module-directory/Model/Country.php(61): Magento\Framework\Model\AbstractModel->__construct(Object(Magento\Framework\Model\Context), Object(Magento\Framework\Registry), NULL, NULL, Array)
#9 vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(93): Magento\Directory\Model\Country->__construct(Object(Magento\Framework\Model\Context), Object(Magento\Framework\Registry), Object(Magento\Framework\Locale\TranslatedLists), Object(Magento\Directory\Model\Country\FormatFactory), Object(Magento\Directory\Model\ResourceModel\Region\CollectionFactory), NULL, NULL, Array)
#10 vendor/magento/framework/ObjectManager/Factory/Compiled.php(88): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\\Directo...', Array)
#11 vendor/magento/framework/ObjectManager/ObjectManager.php(57): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Directo...', Array)
#12 vendor/magento/module-directory/Model/CountryFactory.php(37): Magento\Framework\ObjectManager\ObjectManager->create('Magento\\Directo...', Array, false)
#13 vendor/magento/module-ups/Model/Carrier.php(270): Magento\Directory\Model\CountryFactory->create()
#14 vendor/magento/module-ups/Model/Carrier.php(204): Magento\Ups\Model\Carrier->setRequest(Object(Magento\Quote\Model\Quote\Address\RateRequest))
#15 vendor/magento/module-shipping/Model/Shipping.php(293): Magento\Ups\Model\Carrier->collectRates(Object(Magento\Quote\Model\Quote\Address\RateRequest))
#16 vendor/magento/module-shipping/Model/Shipping.php(209): Magento\Shipping\Model\Shipping->collectCarrierRates('ups', Object(Magento\Quote\Model\Quote\Address\RateRequest))
#17 vendor/magento/framework/Interception/Interceptor.php(74): Magento\Shipping\Model\Shipping->collectRates(Object(Magento\Quote\Model\Quote\Address\RateRequest))
#18 vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Shipping\Model\Shipping\Interceptor->___callParent('collectRates', Array)
#19 vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Shippin...', 'collectRates', Object(Magento\Shipping\Model\Shipping\Interceptor), Array, 'ProgrammaticShi...')
#20 app/code/Company/Module/Plugin/ProgrammaticShipping.php(67): Magento\Shipping\Model\Shipping\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Quote\Model\Quote\Address\RateRequest))
#21 vendor/magento/framework/Interception/Interceptor.php(142): Company\Module\Plugin\ProgrammaticShipping->aroundCollectRates(Object(Magento\Shipping\Model\Shipping\Interceptor), Object(Closure), Object(Magento\Quote\Model\Quote\Address\RateRequest))
#22 var/generation/Magento/Shipping/Model/Shipping/Interceptor.php(26): Magento\Shipping\Model\Shipping\Interceptor->___callPlugins('collectRates', Array, Array)
#23 vendor/magento/module-quote/Model/Quote/Address.php(995): Magento\Shipping\Model\Shipping\Interceptor->collectRates(Object(Magento\Quote\Model\Quote\Address\RateRequest))
#24 vendor/magento/module-quote/Model/Quote/Address.php(936): Magento\Quote\Model\Quote\Address->requestShippingRates()
#25 vendor/magento/module-quote/Model/Quote/Address/Total/Shipping.php(161): Magento\Quote\Model\Quote\Address->collectShippingRates()
#26 vendor/magento/module-quote/Model/Quote/TotalsCollector.php(265): Magento\Quote\Model\Quote\Address\Total\Shipping->collect(Object(Magento\Quote\Model\Quote\Interceptor), Object(Magento\Quote\Model\ShippingAssignment), Object(Magento\Quote\Model\Quote\Address\Total))
#27 vendor/magento/module-quote/Model/ShippingMethodManagement.php(273): Magento\Quote\Model\Quote\TotalsCollector->collectAddressTotals(Object(Magento\Quote\Model\Quote\Interceptor), Object(Magento\Quote\Model\Quote\Address))
#28 vendor/magento/module-quote/Model/ShippingMethodManagement.php(213): Magento\Quote\Model\ShippingMethodManagement->getShippingMethods(Object(Magento\Quote\Model\Quote\Interceptor), Array)
#29 vendor/magento/module-quote/Model/GuestCart/GuestShippingMethodManagement.php(103): Magento\Quote\Model\ShippingMethodManagement->estimateByExtendedAddress(173156, Object(Magento\Quote\Model\Quote\Address))
#30 [internal function]: Magento\Quote\Model\GuestCart\GuestShippingMethodManagement->estimateByExtendedAddress('9e74658791eb1f4...', Object(Magento\Quote\Model\Quote\Address))
#31 vendor/magento/module-webapi/Controller/Rest.php(307): call_user_func_array(Array, Array)
#32 vendor/magento/module-webapi/Controller/Rest.php(216): Magento\Webapi\Controller\Rest->processApiRequest()
#33 var/generation/Magento/Webapi/Controller/Rest/Interceptor.php(24): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))
#34 vendor/magento/framework/App/Http.php(135): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#35 vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#36 index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
Best Answer
You done a silly mistake
Magento\Shipping\Model\Shipping $subject
Should be
\Magento\Shipping\Model\Shipping $subject
As First slash is missing that
$subject
does not get object of anby class.Change in that class then