当调用视图控制器中的buildForum()
方法时
$web = Cross\Core\Delegate::loadApp('web');
$web->on('buildForm', function () {
return \Cross\Lib\Document\HTML::input(array(
'type' => 'text',
'value' => uniqid(),
'name' => 'test'
));
});
$web->run();
由于
buildForm()
方法会自动生成form
标签包裹表单模板中的内容, 表单模板只需要包含输入框就可以了. 函数的返回值将出现在表单模版之前, 源码如下
/**
* 生成表单
* <pre>
* 使用$this->on('buildForm', ....), 来干预所有生成的表单内容
* </pre>
*
* @param string $tplName 包含表单的模板文件路径
* @param array $formTags 生成表单tag的参数
* @param array $tplData 模板数据
* @return string
*/
function buildForm(string $tplName, array $formTags = [], array $tplData = [])
{
$content = $this->delegate->getClosureContainer()->run('buildForm', [$this]);
$content .= $this->obRenderTpl($tplName, $tplData);
$formTags += ['action' => '', 'method' => 'post'];
$formTags['@content'] = $content;
return $this->wrapTag('form', $formTags);
}