我想将一个变量从控制器传递给表单。如何实施?任何人都可以帮我解决这个问题。
谢谢。
答案 0 :(得分: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();
}
}
然后在你的控制器中你可以将必要的vars作为配置传递给表单构造函数:
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;
}
答案 1 :(得分:3)
在您的应用程序的控制器方法中。 添加多个选项($ 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');
....
}
答案 2 :(得分: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
}
}
来自您的控制器,您可以使用表单
调用该功能并“编辑”或“执行您想要的操作”