Issue
I want to validate two forms in on the same page and insert it into database in Cakephp 3.0.Please suggest me the perfect way to use it within same page for different table
AboutController
<?php
namespace App\Controller;
use Cake\ORM\TableRegistry;
use App\Controller\AppController;
class AboutController extends AppController
{
public function index()
{
$tempsub2 = $this->Aboutt->newEntity($this->request->data);
if ($this->request->is('post')) {
$tempsub2 = $this->Aboutt->patchEntity($tempsub2, $this->request->data);
if($this->Aboutt->save($tempsub2))
{
$this->redirect(['controller'=>'Main','action' => 'index']);
}
}
$this->set(compact('tempsub2'));
$this->set('_serialize', ['tempsub2']);
$tempsub = $this->Aboutt->newEntity($this->request->data);
if ($this->request->is('post')) {
$tempsub = $this->Aboutt->patchEntity($tempsub, $this->request->data);
if($this->Aboutt->save($tempsub))
{
$this->redirect(['controller'=>'Main','action' => 'index']);
}
}
$this->set(compact('tempsub'));
$this->set('_serialize', ['tempsub']);
}
}
Abouttable.php
<?php
namespace App\Model\Table;
use App\Model\Entity\recommenda;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\Validation\Validator;
use Cake\ORM\Table;
class AboutTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->table('about');
}
public function validationDefault(Validator $validator)
{
$validator = new Validator();
$validator
->add('email', 'validFormat', ['rule' => 'email','message' => 'E-mail must be valid']);
return $validator;
}
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['email']));
return $rules;
}
}
index.ctp
<?php echo $this->Form->create($tempsub); ?>
<div class="col-md-9">
<div class="input-container">
<!-- <input type="text" id='email' name='email' placeholder="Write your E-mail ID and Click Subscribe Button" id="sub-2">
-->
<?php
echo $this->Form->input('email',array('type' => 'text','label'=>false,"placeholder"=>"Write your E-mail ID and Click Subscribe Button")); ?>
<button>Subscribe</button>
</div>
</div>
<?php echo $this->Form->end(); ?>
<?php echo $this->Form->create($tempsub2); ?>
<div class="col-md-9">
<div class="input-container">
<!-- <input type="text" id='email' name='email' placeholder="Write your E-mail ID and Click Subscribe Button" id="sub-2">
-->
<?php
echo $this->Form->input('email',array('type' => 'text','label'=>false,"placeholder"=>"Write your E-mail ID and Click Subscribe Button")); ?>
<button>Subscribe</button>
</div>
</div>
<?php echo $this->Form->end(); ?>
Solution
Use beforeSave() to perform any validation before processing actual save action. Or as per your code, what I understood is that you need to perform save on 2 different models but with a single form. If it is the case then make the below changes in your code:
- Instead of 2 forms, combine it into one.
- Then divide the fields as per your requirement in controller.
- Perform any validation through beforeSave and ajax as per your scenario.
- And then, process the actual save action from same action into multiple models/tables.
If you need any other help on any of the part, do let me know.
Answered By - meDeepakJain
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.