I wanted to pass a variab开发者_如何学Pythonle from a controller to the form. How can this be implemented? Can anyone please help me on this issue.
Thank you.
Just a live example:
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();
}
}
Then in you controller you can just pass necessary vars as config into form constructor:
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;
}
In the controller method of your application. 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);
....
}
In the form script of your application.
class Application_Form_PlaceNewOrder extends Zend_Form
{
public function init()
{
$items= new Zend_Form_Element_Select('items');
$items->setLabel('Items: *');
$items->setValue('foo');
....
}
when you create the form you can add a custom function
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
}
}
from your controller you can call that function and "edit" or "do what you want" with the form
精彩评论