0

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!

asked Oct 1, 2020 at 17:46
2
  • Share the code of entire controller Commented Oct 1, 2020 at 17:54
  • @DhirenVasoya done. please check Commented Oct 1, 2020 at 18:34

1 Answer 1

2

As I can see you already created custom model for managing or interacting with custom database table.

Model class is : \Transom\Emall\Model\StoreOwner

So, use this class as factory class in your controller's __construct method as per below.

protected $_storeOwner;
public function __construct(\Transom\Emall\Model\StoreOwnerFactory $storeowner)
{
 $this->_storeOwner = $storeowner;
}
public function execute()
{
 // create a payload array of your data where key consist column name and value consist value for that columns
 $modelPayload['col1'] = $val1;
 $modelPayload['col2'] = $val2;
 $modelPayload['col3'] = $val3;
 $modelPayload['col4'] = $val4;
 
 $stobj = $_storeOwner->create();
 $stobj = $stobj->setData($modelPayload)->save();
}
Payal Patel
1,5111 gold badge20 silver badges40 bronze badges
answered Oct 1, 2020 at 19:09
0

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.