我正在使用 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。