and*_*s.k 4 php forms json symfony
如何将Symfony2表单转换为JSON数据结构?寻找合适的捆绑给了我没有结果;
例:
$builder
->add('name', 'text')
->add('password', 'password')
;
Run Code Online (Sandbox Code Playgroud)
会导致类似的事情:
{
fields: {
name: {
type: 'text'
},
password: {
type: 'password'
}
}
}
Run Code Online (Sandbox Code Playgroud)
在$form = $this->createForm(new FormType(), new Entity())没有帮助的情况下迭代表单中的每个元素后,找不到可以在表单构建器中定义的某些属性.
我假设您希望在发布表单后在控制器中获取此信息,在这种情况下,您可以轻松地从表单对象获取基础实体,如下所示:
$entity = $form->getData();
Run Code Online (Sandbox Code Playgroud)
此时,您可以手动将所需的字段拉出到数组json_encode()中,或者...实现JsonSerializable实体中的接口,然后直接json_encode()将对象本身实现.
例如:
<?php
namespace FooApp/BarBundle/Entity;
use JsonSerializable;
class Baz implements JsonSerializable
{
private $name;
private $password;
// ...
function jsonSerialize()
{
return [
'fields' => [
'name' => ['type' => $this->name],
'password' => ['type' => $this->password],
],
];
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在你的控制器中:
$entity = $form->getData();
$json = json_encode($entity);
Run Code Online (Sandbox Code Playgroud)
调用json_encode()将自动调用Baz::jsonSerialize()并返回您定义的数组结构,而后者又是JSON编码的.
更新2016-06-23
我偶然发现了这个问题 - 而且......我意识到我没有回答你的实际问题.
您不希望将表单的基础实体转换为JSON - 而是希望将表单结构表示为数据.我对误解表示道歉 - 希望我可以通过更新纠正这一点.
这是一个概念验证,应该适用于非嵌套表单(尽管创建递归版本或该情况应该是直截了当的).但是,假设您拥有一个实例形式的情况下,包括田name和password,就像这样:
$form = $this->createForm(FooType::class, $foo);
Run Code Online (Sandbox Code Playgroud)
然后可以迭代实例并导出结构的表示; 例如:
$fields = ['fields' => []];
foreach ($form->all() as $field) {
$name = $field->getName();
$type = $field->getConfig()->getType()->getBlockPrefix();
$fields['fields'][$name] = ['type' => $type];
}
echo json_encode($fields, JSON_PRETTY_PRINT);
Run Code Online (Sandbox Code Playgroud)
产量:
{
"fields": {
"name": {
"type": "text"
},
"password": {
"type": "password"
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
5009 次 |
| 最近记录: |