Hi,
I am coding a Zend_Form class that retrieves elements from a database table
metadata and gets related field values (which end up with "_id") from
another table. And hopefuly there will be optional $id param in order to get
record values to assing as element value.
It simply prepares all the needed configration array, which defines element
types, labels, min max value etc. But i'm stucked on "passing select element
option values via $config param". I've tried ['options'],
['options']['options'], ['options']['values'], ['values'] and many more
combinations, also had gone trough the framework php files.
Here you go the exact class and what i wanted to do is around 40th line.
Have a nice day.
kirpit
---------------------------------------------------
<?php
/**
* Data related Zend_Form object
*
* @author [EMAIL PROTECTED]
* @version
*/
class TableForm extends Zend_Form {
protected $_table;
/**
* Pre-construct to prepare elements and configs
*
* @param string $table
* @param integer $id
* @return Zend_Form
*/
public function __construct($tableName, $id = null) {
$this->_table = new Table($tableName);
// #id given, get a record
if(is_int($id)) {
$row = $this->_table->find($id)->current()->toArray();
// TODO: assign $row to elements later
}
$info = $this->_table->info();
$metadata = $info['metadata'];
foreach($metadata as $columnName => $columnDetails) {
// ID columns are hidden -- don't want those being edited!
if($columnName == 'id') {
$formConfig['elements']['id']['type'] = 'hidden';
continue;
}
// Catch relational field to another table
if(preg_match('/_id$/', $columnName)) {
$relatedTable = substr($columnName, 0, -3);
$formConfig['elements'][$relatedTable]['type'] = 'select';
$formConfig['elements'][$relatedTable]['options']['label'] =
$relatedTable;
// GET VALUES AND ASSING THEM
// !!! HERE !!!
//$formConfig['elements'][$relatedTable]['options']['options'] = array(
// 'val1' => 'list1',
// 'val2' => 'list2');
//
continue;
}
// Create other elements
switch($columnDetails['DATA_TYPE']) {
case 'text':
case 'tinytext':
case 'mediumtext':
$formConfig['elements'][$columnName]['type'] = 'textarea';
$formConfig['elements'][$columnName]['options']['label'] = $columnName;
$formConfig['elements'][$columnName]['options']['attribs']['cols'] = 40;
$formConfig['elements'][$columnName]['options']['attribs']['rows'] = 10;
break;
case 'varchar':
case 'char':
default:
$length = $columnDetails['LENGTH'];
$formConfig['elements'][$columnName]['type'] = 'text';
$formConfig['elements'][$columnName]['options']['label'] = $columnName;
$formConfig['elements'][$columnName]['options']['validators']['strlen']['validator']
= 'StringLength';
$formConfig['elements'][$columnName]['options']['attribs']['maxlength'] =
$length;
//$formConfig['elements'][$columnName]['options']['validators']['strlen']['options']['min']
= 0;
$formConfig['elements'][$columnName]['options']['validators']['strlen']['options']['max']
= $length;
break;
}
}
$formConfig['elements']['submit']['type'] = 'submit';
$formConfig['elements']['submit']['options']['label'] = 'Add';
parent::__construct($formConfig);
}
}