将一个变量从Zend控制器传递给zend表格
答
在您的应用程序的控制器方法。 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');
....
}
答
当您创建表单,你可以从你的控制器中添加自定义功能
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
}
}
你可以调用该函数和“编辑”或“你想要什么”与形式
答
只是一个活生生的例子:
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;
}
我们在这里谈论的是什么样的变量?一个字段的值?或值来生成一个选择框,例如? – 2011-03-31 07:41:30
不,它与填充表单元素无关。当我们传递$ this-> view-> variableName ='test'时,我指的是类似于视图的情况; 对于传递变量形式的情况,是否有可能做类似的事情? – rasth 2011-03-31 08:01:49
问题不明确。有很多方法可以将变量传递给表单。在创建表单时,你需要使用这个变量吗?你能提供一个你想要这个变量的例子吗? – Marcin 2011-03-31 10:34:42