2011-03-31 5 views
2

Je voulais transmettre une variable d'un contrôleur au formulaire. Comment cela peut-il être mis en œuvre? Quelqu'un peut-il m'aider s'il vous plaît sur cette question.Passer une variable du contrôleur Zend au formulaire zend

Merci.

+1

De quel type de variable parlons-nous ici? Une valeur pour un champ? Ou des valeurs pour générer une boîte de sélection avec par exemple? –

+0

Non, il n'est pas lié à remplir dans l'élément de formulaire. Je me réfère à un cas similaire à voir lorsque nous passons $ this-> view-> variableName = 'test'; Est-il possible de faire quelque chose de similaire à cela dans le cas de passer de la variable à la forme? – rasth

+0

La question n'est pas claire. Il existe plusieurs façons de transmettre une variable au formulaire. Avez-vous besoin de cette variable lors de la création du formulaire, validation? Pourriez-vous donner un exemple de ce que vous voulez que cette variable? – Marcin

Répondre

3

Dans la méthode du contrôleur de votre 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); 

    .... 
} 

Dans le script de formulaire de votre application.

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

lorsque vous créez le formulaire, vous pouvez ajouter une fonction personnalisée

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 
    } 
} 

de votre contrôleur, vous pouvez appeler cette fonction et « modifier » ou « faites ce que vous voulez » avec le formulaire

+0

Je devais passer la valeur passée dans "myFunction()", c'est-à-dire $ param dans la fonction init(). Est-ce possible? J'ai essayé ceci mais rien n'est imprimé – rasth

+0

que voulez-vous dire par imprimé? Qu'essayez-vous de faire? Pouvez-vous le sens de "myFunction" ici est de faire exactement ce que vous voulez faire, pouvez-vous fournir votre code et expliquer mieux ce que vous devez faire? – MiPnamic

4

Juste un par exemple en direct:

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(); 
    } 

} 

Ensuite, en vous contrôleur, vous pouvez simplement passer vars nécessaires comme config dans constructeur du formulaire:

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; 
} 
Questions connexes