2

我正在使用 PHP 框架 Agile Toolkit 4.3.2 版(目前最新)。我在扩展默认 Page 类的页面上。

假设我有一个表单对象,例如:

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

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

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

如果我使用 HTML 代码而不是 $form 对象,上面的函数就可以工作。

但在这种情况下,当我刷新页面时,HTML 会出现一个字符串,而不是表单:Object Form(22f8a7bc__ancedsearch_form)

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

那么请告诉我,如何在敏捷工具包中渲染对象?如何获取对象的 HTML 代码。

编辑

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

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

$form_html 是从扩展 atk4/lib/Filter.php 的文件返回的(类似于 quicksearch)。快速搜索会自动将 html 添加到网格中,但在我的情况下,我需要将其添加到表的头部,在列名之后。这就是我试图获取表单的 HTML 的原因。

在这个文件中,我的 init 函数看起来像:

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

但这不会返回任何内容,因此我创建了一个函数来返回模板的 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。

4

1 回答 1

2

对于大多数视图:

$html = $view->getHTML();

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

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

要获取单个字段的 HTML:

$field->getInput();

这将为您提供可以放置在列标题中的“输入”元素。您还可以使用“Form_Plain”将您的 GRID 包装在<form>标签内。

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

于 2016-11-24T16:48:35.733 回答