I'm getting an error everytime I send my form in order to store data in a custom table I created. This is the error:
{"0":"M\u00e9todo no v\u00e1lido Transom\\Emall\\Model\\StoreOwner::create","1":"<pre>#1 Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm->execute() called at [generated\/code\/Transom\/Emall\/Controller\/Index\/SendStoreOwnerForm\/Interceptor.php:24]\n#2 Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm\\Interceptor->execute() called at [vendor\/magento\/framework\/App\/Action\/Action.php:108]\n#3 Magento\\Framework\\App\\Action\\Action->dispatch(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:58]\n#4 Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm\\Interceptor->___callParent('dispatch', array(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#)) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:138]\n#5 Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:153]\n#6 Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm\\Interceptor->___callPlugins('dispatch', array(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#), array(array('designLoader', 'customerNotifica...', 'catalog_app_acti...', 'tax-app-action-d...', 'weee-app-action-...', 'storeCheck', 'contextPlugin', 'customer-app-act...'))) called at [generated\/code\/Transom\/Emall\/Controller\/Index\/SendStoreOwnerForm\/Interceptor.php:39]\n#7 Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm\\Interceptor->dispatch(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/App\/FrontController.php:159]\n#8 Magento\\Framework\\App\\FrontController->processRequest(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#, &Transom\\Emall\\Controller\\Index\\SendStoreOwnerForm\\Interceptor#0000000051f3c5dd0000000073cc3fa5#) called at [vendor\/magento\/framework\/App\/FrontController.php:99]\n#9 Magento\\Framework\\App\\FrontController->dispatch(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:58]\n#10 Magento\\Framework\\App\\FrontController\\Interceptor->___callParent('dispatch', array(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#)) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:138]\n#11 Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/module-store\/App\/FrontController\/Plugin\/RequestPreprocessor.php:94]\n#12 Magento\\Store\\App\\FrontController\\Plugin\\RequestPreprocessor->aroundDispatch(&Magento\\Framework\\App\\FrontController\\Interceptor#0000000051f3c7a50000000073cc3fa5#, &Closure#0000000051f3c7830000000073cc3fa5#, &Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:135]\n#13 Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/module-page-cache\/Model\/App\/FrontController\/BuiltinPlugin.php:73]\n#14 Magento\\PageCache\\Model\\App\\FrontController\\BuiltinPlugin->aroundDispatch(&Magento\\Framework\\App\\FrontController\\Interceptor#0000000051f3c7a50000000073cc3fa5#, &Closure#0000000051f3c7830000000073cc3fa5#, &Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:135]\n#15 Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:153]\n#16 Magento\\Framework\\App\\FrontController\\Interceptor->___callPlugins('dispatch', array(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#), NULL) called at [generated\/code\/Magento\/Framework\/App\/FrontController\/Interceptor.php:26]\n#17 Magento\\Framework\\App\\FrontController\\Interceptor->dispatch(&Magento\\Framework\\App\\Request\\Http#0000000051f3c66b0000000073cc3fa5#) called at [vendor\/magento\/framework\/App\/Http.php:136]\n#18 Magento\\Framework\\App\\Http->launch() called at [generated\/code\/Magento\/Framework\/App\/Http\/Interceptor.php:24]\n#19 Magento\\Framework\\App\\Http\\Interceptor->launch() called at [vendor\/magento\/framework\/App\/Bootstrap.php:258]\n#20 Magento\\Framework\\App\\Bootstrap->run(&Magento\\Framework\\App\\Http\\Interceptor#0000000051f3c6240000000073cc3fa5#) called at [slp\/tienda1\/index.php:50]\n<\/pre>","url":"\/slp\/tienda1\/storeowner\/Index\/SendStoreOwnerForm\/","script_name":"\/slp\/tienda1\/index.php"}
I don´t get it. This are my files:
Model
<?php
namespace Transom\Emall\Model;
class StoreOwner extends \Magento\Framework\Model\AbstractModel implements \Magento\Framework\DataObject\IdentityInterface
{
const CACHE_TAG = 'store_owner_emall';
protected $_cacheTag = 'store_owner_emall';
protected $_eventPrefix = 'store_owner_emall';
public function _construct()
{
$this->_init("Transom\Emall\Model\ResourceModel\StoreOwner");
}
public function getIdentities()
{
return [self::CACHE_TAG . '_' . $this->getId()];
}
public function getDefaultValues()
{
$values = [];
return $values;
}
}
ResourceModel:
<?php
namespace Transom\Emall\Model\ResourceModel;
class StoreOwner extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb{
public function __construct(\Magento\Framework\Model\ResourceModel\Db\Context $context)
{
parent::__construct($context);
}
protected function _construct()
{
$this->_init("store_owner_emall", "store_owner_id");
}
}
Collection:
<?php
namespace Transom\Emall\Model\ResourceModel\StoreOwner;
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
protected $_idFieldName = 'store_owner_id';
protected $_eventPrefix = 'store_owner_emall_collection';
protected $_eventObject = 'post_collection';
/**
* Define resource model
*
* @return void
*/
protected function _construct()
{
$this->_init('Transom\Emall\Model\StoreOwner', 'Transom\Emall\Model\ResourceModel\StoreOwner');
}
}
Custom table:
<?php
namespace Transom\Emall\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
/**
* @codeCoverageIgnore
*/
class InstallSchema implements InstallSchemaInterface
{
public function install(SchemaSetupInterface $setup,
ModuleContextInterface $context)
{
$installer = $setup;
$installer->startSetup();
$table = $installer->getConnection()
->newTable($installer->getTable('store_owner_emall'))
->addColumn(
'store_owner_id',
\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
null,
['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
'Store Owner Id'
)
->addColumn(
'customer_name',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['unsigned' => true],
'Customer'
)
->addColumn(
'business',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Business Name'
)
->addColumn(
'business_line',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Business Line'
)
->addColumn(
'website_address',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Website Address'
)
->addColumn(
'facebook',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Facebook'
)
->addColumn(
'instagram',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Instagram'
)
->addColumn(
'email',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Email'
)
->addColumn(
'phone_number',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Phone Number'
)
->addColumn(
'business_phone_number',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Business Phone Number'
)
->addColumn(
'zip_code',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Zip Code'
)
->addColumn(
'state',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'State'
)
->addColumn(
'city',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'City'
)
->addColumn(
'suburb',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
null,
['nullable' => true],
'Suburb'
)
->addColumn(
'created_at',
\Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
null,
['nullable' => false],
'Created At'
)
->addIndex(
$installer->getIdxName('store_owner_emall', ['store_owner_id']),
['store_owner_id']
)
->setComment('Store Owner Landingpage');
$installer->getConnection()->createTable($table);
$installer->endSetup();
}
}
And Finally this is what I'm doing in order to store data in the controller:
<?php
namespace Transom\Emall\Controller\Index;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\Filesystem;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Controller\ResultFactory;
use Psr\Log\LoggerInterface;
use Transom\Emall\Model\StoreOwner;
use Transom\Pakke\Logger\Logger;
class SendStoreOwnerForm extends Action
{
/**
* @var TransportBuilder
*/
protected $transportBuilder;
/**
* @var LoggerInterface
*/
protected $logger;
/**
* @var PageFactory
*/
protected $resultPageFactory;
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $productRepository;
/**
* @var \Magento\Product\Model\ProductFactory
*/
protected $productFactory;
/**
* @var \Magento\CatalogInventory\Api\StockRegistryInterface
*/
protected $stockRegistry;
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
private $storeManager;
private $post;
/**
* @var Data
*/
protected $customerSession;
protected $_storeOwner;
protected $_logger;
/**
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository ,
* @param \Magento\Catalog\Api\Data\ProductInterfaceFactory $productFactory
* @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
* @param \Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory
* @param Filesystem $filesystem
* @param \Magento\Framework\App\Action\Context $context
* @param PageFactory $pageFactory
* @param LoggerInterface $logger
* @param TransportBuilder $transportBuilder
* @param Data $customerSession
* @param StoreOwner $storeOwner
*/
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
\Magento\Catalog\Api\Data\ProductInterfaceFactory $productFactory,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory,
\Magento\Framework\Filesystem $filesystem,
Context $context,
PageFactory $pageFactory,
LoggerInterface $logger,
TransportBuilder $transportBuilder,
StoreOwner $storeOwner,
Logger $loggerPakke
) {
$this->logger = $logger;
$this->transportBuilder = $transportBuilder;
$this->storeManager = $storeManager;
$this->productRepository = $productRepository;
$this->productFactory = $productFactory;
$this->resultPageFactory = $pageFactory;
$this->stockRegistry = $stockRegistry;
$this->_storeOwner = $storeOwner;
$this->_logger = $loggerPakke;
parent::__construct($context);
}
public function execute()
{
$post = $this->getRequest()->getPostValue();
$model = $this->_storeOwner->create();
$formData = array(
'name'=>$post["name"],
'business'=>$post["business"],
'business_line'=>$post["business_line"],
'website_address'=>$post["web_address"],
'facebook'=>$post["facebook"],
'instagram'=>$post["instagram"],
'email'=>$post["email"],
'phone_number'=>$post["telephone"],
'business_phone_number'=>$post["telephone_business"],
'zip_code'=>$post["zip_code"],
'state'=>$post["state"],
'city'=>$post["city"],
'suburb'=>$post["suburb"]
);
/*Send email to admin*/
$receiverInfo = [
'name' => 'Admin',
'email' => '[email protected]'
];
$emails = ['[email protected]']; //users that will receive the email
$store = $this->storeManager->getStore();
$transport = $this->transportBuilder->setTemplateIdentifier(
'Transom_Emall_Store_Owner'
)->setTemplateOptions(
['area' => 'frontend', 'store' => $store->getId()]
)->addTo(
$emails, $receiverInfo['name']
)->setTemplateVars(
$formData
)->setFrom(
'general'
)->getTransport();
try {
// Send an email
$transport->sendMessage();
$model->addData([
'name'=>$post["name"],
'business'=>$post["business"],
'business_line'=>$post["business_line"],
'website_address'=>$post["web_address"],
'facebook'=>$post["facebook"],
'instagram'=>$post["instagram"],
'email'=>$post["email"],
'phone_number'=>$post["telephone"],
'business_phone_number'=>$post["telephone_business"],
'zip_code'=>$post["zip_code"],
'state'=>$post["state"],
'city'=>$post["city"],
'suburb'=>$post["suburb"]
]);
$modelSaved = $model->save();
if($modelSaved){
$this->logger->info("Model was saved!!");
}
else{
$this->logger->info("Model was not saved!!");
}
} catch (\Exception $e) {
// Write a log message whenever get errors
$this->logger->critical($e->getMessage());
}
}
}
I don't get what is wrong whit this, greetings!