I want to override contact us post action using plugin as i have custom field in my contact form. I have created di.xml file,
<?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\Contact\Controller\Index\Post">
<plugin name="custom_contact_action" type="Pos\Contact\Plugin\Post"/>
</type>
</config>
This is my Plugin file,
<?php
namespace Pos\Contact\Plugin;
class Post
{
public function aroundExecute(\Magento\Contact\Controller\Index\Post $subject)
{
$post = $this->getRequest()->getPostValue();
if (!$post) {
$this->_redirect('*/*/');
return;
}
$this->inlineTranslation->suspend();
try {
$postObject = new \Magento\Framework\DataObject();
$postObject->setData($post);
$error = false;
if (!\Zend_Validate::is(trim($post['name']), 'NotEmpty')) {
$error = true;
}
if (!\Zend_Validate::is(trim($post['comment']), 'NotEmpty')) {
$error = true;
}
if (!\Zend_Validate::is(trim($post['email']), 'EmailAddress')) {
$error = true;
}
if (\Zend_Validate::is(trim($post['hideit']), 'NotEmpty')) {
$error = true;
}
if ($error) {
throw new \Exception();
}
$storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
$transport = $this->_transportBuilder
->setTemplateIdentifier($this->scopeConfig->getValue(self::XML_PATH_EMAIL_TEMPLATE, $storeScope))
->setTemplateOptions(
[
'area' => \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE,
'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
]
)
->setTemplateVars(['data' => $postObject])
->setFrom($this->scopeConfig->getValue(self::XML_PATH_EMAIL_SENDER, $storeScope))
->addTo($this->scopeConfig->getValue(self::XML_PATH_EMAIL_RECIPIENT, $storeScope))
->setReplyTo($post['email'])
->getTransport();
$transport->sendMessage();
$this->inlineTranslation->resume();
$this->messageManager->addSuccess(
__('Thanks for contacting us with your comments and questions. We\'ll respond to you very soon.')
);
$this->getDataPersistor()->clear('contact_us');
$this->_redirect('contact/index');
return;
} catch (\Exception $e) {
$this->inlineTranslation->resume();
$this->messageManager->addError(
__('We can\'t process your request right now. Sorry, that\'s all we know.')
);
$this->getDataPersistor()->set('contact_us', $post);
$this->_redirect('contact/index');
return;
}
}
}
When i submit the form then it shows me error ,
Fatal error: Uncaught Error: Call to undefined method Pos\Contact\Plugin\Post::getRequest() in /var/www/html/pospaper/app/code/Pos/Contact/Plugin/Post.php:10 Stack trace: #0 /var/www/html/pospaper/vendor/magento/framework/Interception/Interceptor.php(135): Pos\Contact\Plugin\Post->aroundExecute(Object(Magento\Contact\Controller\Index\Post\Interceptor), Object(Closure)) #1 /var/www/html/pospaper/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Contact\Controller\Index\Post\Interceptor->Magento\Framework\Interception{closure}()
2 /var/www/html/pospaper/generated/code/Magento/Contact/Controller/Index/Post/Interceptor.php(26):
Magento\Contact\Controller\Index\Post\Interceptor->___callPlugins('execute', Array, NULL) #3 /var/www/html/pospaper/vendor/magento/framework/App/Action/Action.php(107): Magento\Contact\Controller\Index\Post\Interceptor->execute() #4 /var/www/html/pospaper/vendor/magento/module-contact/Controller/Index.php(67): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\Ap in /var/www/html/pospaper/app/code/Pos/Contact/Plugin/Post.php on line 10
Please help me!!!! Thanks in advanced!!