gpt4 book ai didi

forms - Symfony2 表单组件 - 在名称属性中创建没有表单名称的字段

转载 作者:行者123 更新时间:2023-12-03 10:33:39 25 4
gpt4 key购买 nike

我目前正在尝试通过 Silex 微框架使用 Symfony2 表单组件。

我的登录表单生成如下:

$app = $this->app;

$constraint = new Assert\Collection(array(
'username' => new Assert\NotBlank(),
'password' => new Assert\NotBlank(),
));

$builder = $app['form.factory']->createBuilder('form', $data, array('validation_constraint' => $constraint));

$form = $builder
->add('username', 'text', array('label' => 'Username'))
->add('password', 'password', array('label' => 'Password'))
->getForm()
;

return $form;

问题是生成的表单正在创建如下:
<fieldset>
<input type="hidden" value="******" name="form[_token]" id="form__token">
<section class="">
<label class=" required" for="form_username">Username</label>
<div><input type="text" value="" name="form[username]" id="form_username" class="text"></div>
</section>
<section class="">
<label class=" required" for="form_password">Password</label>
<div><input type="password" value="" name="form[password]" id="form_password" class="password"></div>
</section>
<section>
<div><button class="fr submit">Login</button></div>
</section>
</fieldset>

而我希望 name 和 id 属性如下:
<div><input type="text" value="" name="username" id="username" class="text"></div>
...
<div><input type="password" value="" name="password" id="password" class="password"></div>

我在网上搜索并发现了关于“property_path”选项的建议,但我相信这与在实际 Symfony2 框架本身中使用时用于处理数据的类有关。

我已经浏览了表单组件文件,并且设置的点是:

Symfony/Component/Form/Extension/Core/Type/FieldType.php - 第 71 行
public function buildView(FormView $view, FormInterface $form)
{
$name = $form->getName();

if ($view->hasParent()) {
$parentId = $view->getParent()->get('id');
$parentFullName = $view->getParent()->get('full_name');
$id = sprintf('%s_%s', $parentId, $name);
$fullName = sprintf('%s[%s]', $parentFullName, $name);
} else {
$id = $name;
$fullName = $name;
}
...

不幸的是,FormFactory 使用了 FormBuilder,然后它与 Form 类一起工作,我没有足够的时间来分析组件的整个内部工作。

我知道字段被添加到 FormBuilder 中的“子”数组中,并带有相应的选项列表。调用 getForm 函数时,会实例化一个新的 Form,并使用 add() 方法将每个子 FieldType 输入到 Form 中。这个 Form->add() 方法自动将 Form 设置为每个 child 的父级:
public function add(FormInterface $child)
{
$this->children[$child->getName()] = $child;

$child->setParent($this);

if ($this->dataMapper) {
$this->dataMapper->mapDataToForm($this->getClientData(), $child);
}

return $this;
}

没有开始重写这些类只是为了删除它,其他人是否知道仅显示字段名称的最佳方法?

可以只在 form_div_layout.html.twig widget_attributes block 中提取“name”而不是“full_name”,但我不确定这是否理想(因为 id 保持不变)或者是否有其他方法或可注入(inject)可以解决问题的选项。

最佳答案

如果您不使用子表单,您可以设置 getName您的表单方法为空字符串:

class FormType extend AbstractType {
// ...

public function getName() {
return '';
}
}

关于forms - Symfony2 表单组件 - 在名称属性中创建没有表单名称的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com