加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 21:30:00 所属栏目:资源 来源:网络整理
导读:我正在尝试使用Symfony2表单组件,尽管Silex微型框架。 我的登录表单生成如下: $app = $this-app;$constraint = new AssertCollection(array( 'username' = new AssertNotBlank(),'password' = new AssertNotBlank(),));$builder = $app['form.factory']
我正在尝试使用Symfony2表单组件,尽管Silex微型框架。

我的登录表单生成如下:

$app = $this->app;

$constraint = new AssertCollection(array(
    'username' => new AssertNotBlank(),'password' => new AssertNotBlank(),));

$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>

而我想要的名称和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中的“children”数组中,并具有相应的选项列表。当getForm函数被调用时,一个新的Form被实例化,每个子FieldType都使用add()方法输入到Form中。 Form> add()方法自动将Form设置为每个子项的父项:

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块中拖动“name”而不是“full_name”,但我不确定这是否是理想的(因为id保持不变)或者是否有其他方法或注入选项会做的伎俩。

解决方法

而不是使用createBuilder函数:
$builder = $app['form.factory']->createNamedBuilder(null,'form',array('validation_constraint' => $constraint));

第一个参数是表单名称。

例如Bernhard Schussek自己在http://stackoverflow.com/a/13474522/520114

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读