Php 对非对象调用成员函数getFullActionName()
我正在使用Magento 1.9.0,我正在尝试让cron接收一个废弃的cart调用,但有一个异常一直在发生Php 对非对象调用成员函数getFullActionName(),php,magento,exception,error-handling,magento-1.9,Php,Magento,Exception,Error Handling,Magento 1.9,我正在使用Magento 1.9.0,我正在尝试让cron接收一个废弃的cart调用,但有一个异常一直在发生 TRIGGER: shutdown function Last error: Array ( [type] => 1 [message] => Call to a member function getFullActionName() on a non-object [file] => /chroot/home/abc/URL.com/html
TRIGGER: shutdown function
Last error:
Array
(
[type] => 1
[message] => Call to a member function getFullActionName() on a non-object
[file] => /chroot/home/abc/URL.com/html/store/app/code/local/Mnwebco/Personalize/Model/Observer.php
[line] => 9
)
根据AOEscheduler的说法,基本上它在那个点上失败了,没有前进
这是本地模块的代码
class Mnwebco_Personalize_Model_Observer
{
public function catalogProductLoadAfter(Varien_Event_Observer $observer)
{
// set the additional options on the product
$action = Mage::app()->getFrontController()->getAction();
if ($action->getFullActionName() == 'checkout_cart_add' || $action->getFullActionName() == 'checkout_cart_updateItemOptions') {
// assuming you are posting your custom form values in an array called extra_options...
//if ($options = $action->getRequest()->getParam('extra_options'))
//Mage::log('req parms '.$action->getRequest()->getParam('custommessage'));
if ($action->getRequest()->getParam('custommessage')!='') {
$personvalue = $action->getRequest()->getParam('custommessage');
$product = $observer->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
$additionalOptions[] = array(
'label' => 'Message to add',
'value' => $personvalue,
);
// add the additional options array with the option code additional_options
$observer->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
} elseif ($action->getRequest()->getParam('customsigmessage')!='') {
$personvalue = $action->getRequest()->getParam('customsigmessage');
$product = $observer->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
$additionalOptions[] = array(
'label' => 'Message to add with signature',
'value' => $personvalue,
);
// add the additional options array with the option code additional_options
$observer->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
} elseif ($action->getRequest()->getParam('bridesname')!='') {
$bride = $action->getRequest()->getParam('bridesname');
$groom = $action->getRequest()->getParam('groomsname');
$wedding = $action->getRequest()->getParam('weddingdate');
$product = $observer->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
$additionalOptions[] = array(
'label' => 'Personalized Information',
'value' => 'Bride: '.$bride.', Groom: '.$groom.', Date: '.$wedding,
);
/*
$additionalOptions[] = array(
'label' => 'bridesname',
'value' => $bride,
);
$additionalOptions[] = array(
'label' => 'groomsname',
'value' => $groom,
);
$additionalOptions[] = array(
'label' => 'weddingdate',
'value' => $wedding,
);
*/
// add the additional options array with the option code additional_options
$observer->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
}
}
}
public function checkoutCartUpdateItemsBefore (Varien_Event_Observer $observer)
{
// set the additional options on the product
$action = Mage::app()->getFrontController()->getAction();
//Mage::log('!imp '.$action->getFullActionName());
if ($action->getFullActionName() == 'checkout_cart_updateItemOptions') {
// assuming you are posting your custom form values in an array called extra_options...
//if ($options = $action->getRequest()->getParam('extra_options'))
//Mage::log('req parms '.$action->getRequest()->getParam('custommessage'));
if ($action->getRequest()->getParam('custommessage')!='') {
$personvalue = $action->getRequest()->getParam('custommessage');
$product = $observer->getItem()->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
$additionalOptions[] = array(
'label' => 'Message to add',
'value' => $personvalue,
);
// add the additional options array with the option code additional_options
$observer->getItem()->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
} elseif ($action->getRequest()->getParam('customsigmessage')!='') {
$personvalue = $action->getRequest()->getParam('customsigmessage');
$product = $observer->getItem()->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
$additionalOptions[] = array(
'label' => 'Message to add with signature',
'value' => $personvalue,
);
// add the additional options array with the option code additional_options
$observer->getItem()->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
} elseif ($action->getRequest()->getParam('bridesname')!='') {
$bride = $action->getRequest()->getParam('bridesname');
$groom = $action->getRequest()->getParam('groomsname');
$wedding = $action->getRequest()->getParam('weddingdate');
$product = $observer->getItem()->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options')) {
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
$additionalOptions[] = array(
'label' => 'Personalized Information',
'value' => 'Bride: '.$bride.', Groom: '.$groom.', Date: '.$wedding,
);
// add the additional options array with the option code additional_options
$observer->getItem()->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
}
}
}
public function salesConvertQuoteItemToOrderItem (Varien_Event_Observer $observer)
{
$quoteItem = $observer->getItem();
if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
$orderItem = $observer->getOrderItem();
$options = $orderItem->getProductOptions();
$options['additional_options'] = unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
}
您的getAction()可能返回null。
更好的方法是这样做
$action = Mage::app()->getRequest()->getActionName();
这将返回一个字符串。因此,在您的if条件下,使用
if($action == 'checkout_cart_add' || $action == 'checkout_cart_updateItemOptions') {}
太棒了,这似乎对那个特殊问题有效。现在我有另一个MageMonkey错误需要解决。现在看到这个:触发器:关闭函数最后一个错误:数组([type]=>1[message]=>Class'Mage\u Sweetmonkey\u Helper\u Data'未找到[file]=>/chroot/home/abc/url.html/store/app/Mage.php[line]=>547)Backlog:exception“exception”位于/chroot/home/bonniemo/bonniemohr.com/html/store/app/code/community/Aoe/Scheduler/Helper/GracefulDead.php:53堆栈跟踪:#0[内部函数]:Aoe#u Scheduler_Helper_GracefulDead::beforeDyingShutdown()您应该接受这个答案。你的新问题看起来与第三方扩展有关,应该像它自己的问题一样提问,他的回答很有帮助。