在Phalcon中,可以创建一个扩展HH12|HH
的自定义表单。此类有一个名为Phalcon\Form\Form
的方法,但我找不到有关如何使用我指定的操作自动呈现setAction
标记的任何信息。
我的表单名为<form>
,我将其传递给VOLT视图:
RegisterForm
在我的VOLT模板中,我可以使用$this->view->registerForm = new RegisterForm(new UserModel());
宏自动呈现在我的表单中注册的输入字段。
是否有任何可以创建以下内容的宏?
registerForm.render('username')
假设我已经使用过:
<form action="/register" method="post">
在表单定义中。
答案 0 :(得分:2)
经过另一天的研究,并在Phalcon的Slack频道聊天,我意识到,没有内置的方式来做我想要的事情。
最简单的解决方案是创建一个扩展BaseForm
的{{1}}类。这是一个例子:
Phalcon\Forms\Form
有了这个,在扩展自定义表单定义后,我可以使用:
<?php
namespace MyNamespace\Common\Form;
use Phalcon\Forms\Form;
class BaseForm extends Form {
/**
* Creates <form> tag in VOLT view.
*/
public function startForm($method = 'post') {
return '<form action="'.$this->getAction().'" method="'.$method.'">';
}
/**
* Creates </form> tag in VOLT view.
*/
public function endForm() {
return '</form>';
}
/**
* Pushes all errors to flash container.
*/
public function error($name) {
if($this->hasMessagesFor($name)) {
foreach($this->getMessagesFor($name) as $message) {
$this->flash->error($message);
}
return true;
}
return false;
}
}
答案 1 :(得分:0)
以下是如何在Volt中呈现表单:
{{ form('products/save', 'method': 'post') }}
<label for="name">Name</label>
{{ text_field("name", "size": 32) }}
<label for="type">Type</label>
{{ select("type", productTypes, 'using': ['id', 'name']) }}
{{ submit_button('Send') }}
{{ end_form() }}
Docs中的更多信息。
您还可以查看Phalcon的项目Vokuro以获取更多示例。
更新:Lukasz要求一个解决方案,使用它的属性从自定义表单元素中呈现表单标记。 Phlacon Form Decorators 是我能找到的问题的最接近的解决方案。