php - Get Form Input from Zend Framework -
i venturing zend framework , decided build simple application practice with. app building simple calculator allows user add, subtract, multiply , divide 2 numbers.
i having trouble retrieving user input calculate answer. when use zend_debug::dump($this->getrequest()->getparams()); in indexaction() method displays form data correctly on page, how send data proper model processing?
here indexcontroller.php file:
<?php class indexcontroller extends zend_controller_action { //initialize calculator form on controller call public function init() { //istantiate zend_form object $form = new zend_form(); $form->setaction('') ->setmethod('post'); //first number input $num1 = $form->createelement('text', 'num1'); $num1->addvalidator('digits') ->setrequired(true) ->setattrib('placeholder', 'enter first number'); //second number input $num2 = $form->createelement('text', 'num2'); $num2->addvalidator('digits') ->setrequired(true) ->setattrib('placeholder', 'enter second number'); //math operator select box $op = $form->createelement('select', 'operator'); $op->setrequired(true) ->setmultioptions(array('1'=>'+', '2'=>'-', '3'=>'x', '4'=>'/')) ->setrequired(true); //add elements form $form->addelement($num1) ->addelement($op) ->addelement($num2) ->addelement('submit', 'equal', array('label' => '=')); return $form; } public function indexaction() { //render form view $this->view->form = $this->init(); $this->render('index'); } public function calcaction() { $form = $this->form; $data = $this->getrequest()->getparams(); if ($data->ispost()) { if($data->isvalid()) { $calculator = new calculator_model; switch($data['operator']) { case $data['operator'] === '1': $ans = $calculator->addnums($data['num1'], $data['num2']); return $ans; break; case $data['operator'] === '2': $ans = $calculator->subtractnums($data['num1'], $data['num2']); return $ans; break; case $data['operator'] === '3': $ans = $calculator->multiplynums($data['num1'], $data['num2']); return $ans; break; case $data['operator'] === '4': $ans = $calculator->dividenums($data['num1'], $data['num2']); return $ans; break; } } else { return $form->getmessages(); } } } } i tried placing calcaction() script indexaction() method page doesn't render @ all. how can user input calculator_model processing?
i guess doing of things right think should not programing in controller. controller not passing data model, trying figure out function call.
that should have been done model. problem simple , can solution, not scalable. consider wish add operation, have create it's function in model , add case in controller well.
what is
check if form valid : $form->isvalid()
instantiate model : $cal = new model()
pass data model : $calc->process($form->getvalues())
the process() public method in model. switch case statement go method , call appropriate protected method. let model decide options operator element in form $op->setmultioptions(model::$availableoperations) way can update model whenever need add operation.
i hope makes sense someone. :)
Comments
Post a Comment