I have a CakePHP form that I need to validate but the form fields don't equate to anything in a database table or model.
To get it to work I create a dummy 'Model' using ClassRegistry::init, attach all the necessary validation rules, set the POST data from the form to the Model and then validate it
View/NoTable/index.ctp
1 2 3 4 5 6 | // view<?=$this->Html->tag('h2', 'TestForm form');?><?=$this->Form->create('TestForm');?><?=$this->Form->input('input1');?><?=$this->Form->submit();?><?=$this->Form->end();?> |
Controller/NoTableController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // controller & actionclass NoTableController extends Controller{ public function index() { if ($this->request->is('POST')) { $this->log('POST'); $this->log($this->request->data); $this->log(array_keys($this->request->data)[0]); /** * Create a model using the form name */ $model = ClassRegistry::init( [ 'class' => array_keys($this->request->data)[0], 'table' => false, 'type' => 'Model' ] ); /** * Add your validation rules here. Just like in a model */ $model->validate = [ 'input1' => [ 'notBlank' => [ 'rule' => 'notBlank', 'required' => true, 'message' => 'Please enter some text' ] ] ]; $model->set($this->request->data); if ($model->validates()) { // do stuff because validation passes $this->Flash->success(__('Thanks for the data')); } else { $this->Flash->error(__('Missing data. Please re-try.')); } } }} |




0 Comments