Hi ,
Working on Magento CE2.1
I have created after plugin for the public function of core class, Please find code below
etc/di.xml
... <type name="Magento\Sales\Block\Adminhtml\Order\View\Items\Renderer\DefaultRenderer"> <plugin name="ricky-order-campaign-view-information" type="Ricky\AdminGiftOrderManager\Plugin\DefaultRendererAfter" sortOrder="10" /> </type> ...
<?php namespace Ricky\AdminGiftOrderManager\Plugin; use Magento\Sales\Block\Adminhtml\Order\View\Items\Renderer\DefaultRenderer; class DefaultRendererAfter { /** * @param \Magento\Sales\Block\Adminhtml\Order\View\Items\Renderer\DefaultRenderer $defaultRenderer * @param null $result * @param \Magento\Framework\DataObject|Item $item * @param string $column * @param null $field * @return string * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function afterGetColumnHtml(DefaultRenderer $defaultRenderer, $result, \Magento\Framework\DataObject $item, $column, $field) { $result .= $item->getCampaignName(); return $result; } }now after clearing cache and deleting var/generation dir I have compiled the code successfully using
php bin/magento setup:di:compileWhen I try to visit the page I am reciving the follwoing error in log
[Mon Sep 21 04:14:56.760564 2020] [:error] [pid 1155] [client 172.18.0.1:58648] PHP Fatal error: Uncaught TypeError: Argument 3 passed to Ricky\\AdminGiftOrderManager\\Plugin\\DefaultRendererAfter::afterGetColumnHtml() must be an instance of Magento\\Framework\\DataObject, none given, called in /var/www/html/app_svr/sg/member/vendor/magento/framework/Interception/Interceptor.php on line 152 and defined in /var/www/html/app_svr/sg/member/app/code/Ricky/AdminGiftOrderManager/Plugin/DefaultRendererAfter.php:20\nStack trace:\n#0 /var/www/html/app_svr/sg/member/vendor/magento/framework/Interception/Interceptor.php(152): Ricky\\AdminGiftOrderManager\\Plugin\\DefaultRendererAfter->afterGetColumnHtml(Object(Magento\\Sales\\Block\\Adminhtml\\Order\\View\\Items\\Renderer\\DefaultRenderer\\Interceptor), '\\n <div id="o...')\n#1 /var/www/html/app_svr/sg/member/var/generation/Magento/Sales/Block/Adminhtml/Order/View/Items/Renderer/DefaultRenderer/Interceptor.php(26): Magento\\Sales\\Block\\Adminhtml\\Order\\View\\Items\\Renderer\\DefaultRenderer\\Interceptor->___callPlugins('getColumnHtml', Array, Array)\n#2 /var/www/html/app_svr/sg/membe in /var/www/html/app_svr/sg/member/app/code/Ricky/AdminGiftOrderManager/Plugin/DefaultRendererAfter.php on line 20, referer: http://127.0.0.1:86/sg/member/admin_spi/sales/order/index/key/38bc90c2714e9b588d6417fd24400a55083c27521636ca1fdd440a0897d6186e/ ~
Solved! Go to Solution.
Hello @Kapil_Thakur
I tried the same thing and get error if I don't use $field as a optional parameter, but it fixed later when I passed it as optional.
If you still getting error, you can give a try with preference !
Hope it will help you to resolve your problem
Hello @Kapil_Thakur
In your after plugin afterGetColumnHtml , you are passing three arguments but the core class is passing two arguments and 1 argument is optional, please change your function like below :
public function afterGetColumnHtml(DefaultRenderer $defaultRenderer, $result, \Magento\Framework\DataObject $item, $column, $field =null) { $result .= $item->getCampaignName(); return $result; }
function fun($optionalParam = null) is used if we want to use any parameter as optional.
Hope it helps !
Hello @Kapil_Thakur
I tried the same thing and get error if I don't use $field as a optional parameter, but it fixed later when I passed it as optional.
If you still getting error, you can give a try with preference !
Hope it will help you to resolve your problem