/** * Add a field using one of many syntaxes * Returns reference to the field */ public function field($label, $callback = null) { if (is_a($callback, 'Squi\\Form_Field')) { $field = $callback; } elseif (is_a($label, 'Squi\\Form_Field')) { $field = $label; } else { $field = Form_Field::make(); } $field->form = $this; // field('field_name') if (is_null($callback) && is_string($label)) { $field->name = $label; // Automagic label by capitalization $field->label($label, $humanize = true); } elseif (is_null($callback) && is_callable($label)) { call_user_func($label, $field, $this); } elseif (is_null($callback) && is_array($label)) { if (isset($label[0]) && isset($label[1])) { $field = $label[1]; $field->label($label[0]); } else { $field->parse_config($label); } } elseif (is_string($label) && is_array($callback)) { $field->label($label); // The array could either be an array of Table_Fields // or an assoc array defining a field if (is_a(reset($callback), 'Squi\\Form_Field')) { $field->fields = $callback; } else { $field->parse_config($callback); } } elseif (is_a($label, 'Squi\\Form_Label')) { $field->label($label); } elseif (is_string($label) && is_string($callback)) { $field->label($label); $field->name = $callback; } $this->fields[] = $field; return $field; }