[英]Get Form Input from Zend Framework
我正在嘗試使用Zend框架,並決定構建一個簡單的應用程序來進行實踐。 我正在構建的應用程序是一個簡單的計算器,允許用戶對兩個數字進行加,減,乘和除運算。
我在檢索用戶輸入以計算答案時遇到麻煩。 當我使用Zend_Debug::dump($this->getRequest()->getParams());
在IndexAction()
方法中,它可以在頁面上正確顯示表單數據,但是如何將數據發送到適當的模型進行處理?
這是IndexController.php
文件:
<?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 to form
$form->addElement($num1)
->addElement($op)
->addElement($num2)
->addElement('submit', 'equal', array('label' => '='));
return $form;
}
public function indexAction()
{
//render the 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();
}
}
}
}
我嘗試將calcAction()
腳本放入indexAction()
方法中,但此頁面根本無法呈現。 如何獲得用戶輸入的Calculator_Model
進行處理?
我想您在大多數事情上都做對了,但是我個人認為您不應該在控制器中做太多的編程。 您的控制器不僅將數據傳遞給模型,而且還實際上試圖找出要調用的函數。
該工作應該由模型完成。 問題很簡單,解決方案也可以,但是這將不可擴展。 考慮到您希望添加一個操作,您將必須在模型中創建它的功能並在您的控制器中添加一個案例。
我通常要做的是
檢查表單是否有效: $form->isValid()
實例化模型: $cal = new Model()
將數據傳遞給模型: $calc->process($form->getValues())
process()將是模型中唯一的公共方法。 switch case語句將進入該方法並調用適當的受保護方法。 我也會讓模型以$op->setMultiOptions(Model::$availableOperations)
的形式決定運算符元素的選項,這樣我就可以在需要添加操作時隨時更新模型。
我希望所有這些對某人有意義。 :)
我找到了解決此問題的方法。
我更改了$data = $this->getRequest()->getParams();
到$data = $this->getRequest()->getPost();
然后我開始正確獲取數據。 我不知道是什么阻止了getParams();
傳遞數據getParams();
但是我發現getParams();
不使用Zend_Filter();
驗證數據Zend_Filter();
函數, getPost();
但是。
計算器應用程序現在完成的代碼與此處粘貼的代碼完全不同。 您可以在以下位置查看最終產品: https : //github.com/TylerB24890/Zend-Calculator
在我的最終應用程序中,我必須為數字輸入創建一個單獨的驗證器類,以允許整數和浮點數。 我沒有將它們分配給Zend_Filter()
函數,因為我無法正確地使它們工作。 如果有人對如何實現這些工作有任何建議,請在上面的鏈接中為GitHub項目做出貢獻。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.