如何在 Agile Toolkit 中呈现(获取 HTML 的)表单 object?

How do I render (get HTML of) a form object in Agile Toolkit?

我正在使用 PHP 框架 Agile Toolkit 版本 4.3.2(目前最新)。我在扩展默认页面 class.

的页面上

假设我有一个 object 形式,例如:

$form = $this->add('Form');
$form->addField('text', 'name', 'Name');
$form->addSubmit('Save');

如何获得 object 的 HTML 表格?我想将表单的 HTML 发送到另一个模板部分,例如:

$this->template->trySetHTML('Content', $form);

如果我使用 HTML 代码而不是 $form object.

,则上面的函数有效

但在这种情况下,当我刷新页面时,出现的不是 HTML 形式的字符串,如: Object Form(22f8a7bc__ancedsearch_form)

我试过:$form->render()$form->getHTML() 但是这些功能不起作用。

所以请告诉我,如何在敏捷工具包中呈现 object?如何获得 object 的 HTML 代码。

编辑

我正在扩展网格布局。对于每一列,我都添加了一个搜索过滤选项。我已经扩展了 Grid_Advanced.php 以便能够自定义它。在每一列的 table header(列名)下方,我插入了一个带有输入的表单(我正在发送列名字段):

$header_col->trySetHTML('advance_search_filter', $form_html);

$form_html 是从扩展 atk4/lib/Filter.php 的文件中 return 编辑的(类似于快速搜索)。快速搜索会自动将 html 添加到网格中,但在我的例子中,我需要将它添加到 table 的头部,列名之后。这就是为什么我要获取表单的 HTML。

在这个文件中,我有一个看起来像这样的初始化函数:

public function init()
{
        parent::init();
        $this->addClass('grid-extended-search atk-box ui-widget ui-widget-content');
        $this->default_controller = 'Controller_..._MVCForm';
        $this->template->trySet('fieldset', 'atk-row');

        $this->bs = $this->addSubmit('Search');

        $this->save = $this->bs;
}

但是这 return 没什么,所以我为 return 模板的 HTML 创建了一个函数。但是表格是空的,所以我重新创建了字段(这很糟糕):

    $m = $this->view->model
    foreach($this->fields as $f) {
            $field = $this->view->columns[$f];

            if($m->hasField($f)) {
                if($field['type'] == 'text') {
                    $field_html = $this->addField('line', $f, $field['descr']);
                    $form_html .= $field_html->getInput();
                }
                $this->template->setHTML('Content', $form_html);
            }
        }

有什么想法吗?为什么表格是空的?我使用 addField 将字段添加到现有字段中,但这些字段可能存在。我不知道如何获取它们,获取现有表单的 HTML.

大多数观看次数:

$html = $view->getHTML();

但是对于表单来说可能更棘手。

在您描述的解决方案中(编辑后),您似乎并不真正需要表单的所有功能

获取单个字段的 HTML:

$field->getInput();

这将为您提供 "input" 元素,您可以将其放置在列 headers 中。您还可以使用 "Form_Plain" 将 GRID 包装在 <form> 标签内。

不过,您需要手动处理提交。