2011-03-31 68 views
2

我想将一个变量从控制器传递给表单。这如何实现?任何人都可以请帮我解决这个问题。将一个变量从Zend控制器传递给zend表格

谢谢。

+1

我们在这里谈论的是什么样的变量?一个字段的值?或值来生成一个选择框,例如? – 2011-03-31 07:41:30

+0

不,它与填充表单元素无关。当我们传递$ this-> view-> variableName ='test'时,我指的是类似于视图的情况; 对于传递变量形式的情况,是否有可能做类似的事情? – rasth 2011-03-31 08:01:49

+0

问题不明确。有很多方法可以将变量传递给表单。在创建表单时,你需要使用这个变量吗?你能提供一个你想要这个变量的例子吗? – Marcin 2011-03-31 10:34:42

回答

3

在您的应用程序的控制器方法。 addMultiOptions($ options);

class OrderController extends Zend_Controller_Action 
{ 
    $options = array(
     'foo' => 'Foo2 Option', 
     'bar' => 'Bar2 Option', 
     'baz' => 'Baz2 Option', 
     'bat' => 'Bat2 Option' 
    ); 

    $form = new Application_Form_PlaceNewOrder(); 
    $form->items->addMultiOptions($options); 

    .... 
} 

在应用程序的表单脚本中。

class Application_Form_PlaceNewOrder extends Zend_Form 
{ 
    public function init() 
    { 
     $items= new Zend_Form_Element_Select('items'); 
     $items->setLabel('Items: *');  
     $items->setValue('foo'); 
     .... 
} 
1

当您创建表单,你可以从你的控制器中添加自定义功能

class Application_Form_Sample extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setMethod('post')->setAction('/sampleController/sampleAction'); 

    $name = new Zend_Form_Element_Text('name'); 
    $name->setLabel('Nome') 
     ->setDescription("Here goes the name") 
     ->setRequired(true); 

     $submit = new Zend_Form_Element_Submit('Submit'); 
     $submit->setIgnore(true); 

     $this->addElement($name) 
     ->addElement($submit); 
    } 
    public function myFunction($param) { 
     //do something with the param 
    } 
} 

你可以调用该函数和“编辑”或“你想要什么”与形式

+0

我需要传递在myFunction()中传递的值,即init()函数中的$ param。这可能吗?我试过但没有印刷 – rasth 2011-04-06 07:14:36

+0

你打印什么意思?你想做什么?你可以在这里“myFunction”的意思是做你想做的事,你能提供你的代码并更好地解释你需要做什么吗? – MiPnamic 2011-04-06 22:05:14

4

只是一个活生生的例子:

class Admin_Form_Product extends Admin_Form_Abstract { 

    protected $_categories = array(); 

    protected $_brands = array(); 

    protected $_types = array(); 

    protected $_periods = array(); 

    protected $_stores = array(); 

    public function init() { 
     $this 
      ->addElement('hidden', 'id') 
      ->addElement('text', 'name', array('label' => 'Name:', 'required' => true, 'size' => 50)) 
      ->addElement('multiCheckbox', 'category_id', array('label' => 'Category:', 'required' => true, 'multiOptions' => $this->getCategories())) 
      ->addElement('multiCheckbox', 'store_id', array('label' => 'Stores:', 'required' => true, 'multiOptions' => $this->getStores())) 
      ->addElement('select', 'brand_id', array('label' => 'Brand:', 'required' => true, 'multiOptions' => $this->getBrands())) 
      ->addElement('select', 'type_id', array('label' => 'Type:', 'required' => true, 'multiOptions' => $this->getTypes())) 
      ->addElement('select', 'period_id', array('label' => 'Period:', 'required' => true, 'multiOptions' => $this->getPeriods())) 
      ->addElement('textarea', 'description', array('label' => 'Description:', 'rows' => 12, 'cols' => 50)) 
      ->addElement('text', 'price', array('label' => 'Price ($):', 'required' => true, 'size' => 7)) 
      ->addElement('text', 'quantity', array('label' => 'Quantity:', 'required' => true, 'size' => 7, 'value' => 1)) 
      ->addElement('button', 'submit', array('label' => 'Save', 'type' => 'submit')); 

     $this->category_id->setValidators(array(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::NULL))); 
     $this->brand_id->setValidators(array(
      new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::NULL) 
     )); 
     $this->price->setValidators(array(new Zend_Validate_Float())); 
    } 

    public function setCategories($categories = array()) { 
     $this->_categories = $categories; 
     return $this; 
    } 

    public function getCategories() { 
     return $this->_categories; 
    } 

    public function setBrands($brands) { 
     $this->_brands = $brands; 
    } 

    public function getBrands() { 
     return $this->_brands; 
    } 

    public function setTypes($types) { 
     $this->_types = $types; 
    } 

    public function getTypes() { 
     return $this->_types; 
    } 

    public function setPeriods($periods) { 
     $this->_periods = $periods; 
    } 

    public function getPeriods() { 
     return $this->_periods; 
    } 

    public function setStores($stores) { 
     $this->_stores = $stores; 
    } 

    public function getStores() { 
     return $this->_stores; 
    } 

    public function prepareDecorators() { 
     $this 
      ->clearDecorators() 
      ->addDecorator(new Zend_Form_Decorator_ViewScript(array('viewScript' => 'forms/product-form.phtml'))) 
      ->addDecorator('Form'); 

     $this->setElementDecorators(array('ViewHelper')); 

     return parent::prepareDecorators(); 
    } 

} 

然后在你控制器,你可以只通过必要瓦尔作为配置成表单构造:

public function addAction() { 
    $categories = $this->_helper->service('Category')->getCategories(); 
    $brands = $this->_helper->service('Brand')->getBrands(); 
    $types = $this->_helper->service('Type')->getTypes(); 
    $stores = $this->_helper->service('Store')->getStores(); 
    $periods = $this->_helper->service('Period')->getPeriods(); 
    $filter = new Skaya_Filter_Array_Map('name', 'id'); 
    $filterCategory = new Skaya_Filter_Array_ParentRelation(); 

    $form = new Admin_Form_Product(array(
     'name' => 'user', 
     'action' => $this->_helper->url('save'), 
     'method' => Zend_Form::METHOD_POST, 
     'categories' => $filterCategory->filter($categories->toArray()), 
     'brands' => $filter->filter($brands->toArray()), 
     'types' => $filter->filter($types->toArray()), 
     'periods' => $filter->filter($periods->toArray()), 
     'stores' => $filter->filter($stores->toArray()) 
    )); 
    $form->prepareDecorators(); 
    $this->view->form = $form; 
} 
相关问题