我目前正在嘗試通過Silex微框架來使用Symfony2表單組件。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>
而我想要的名稱和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'opti的建議但我相信這是在實際的Symfony2框架中使用用於處理數據的類。
我經歷過的表單組件文件,並作爲該被設定爲在點:
的Symfony /組件/表/擴展/核心/類型/ 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函數時,將實例化一個新窗體,並使用add()方法將每個子FieldType輸入到窗體中。這種形式 - > add()方法會自動設置形式,每個孩子的家長:
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保持不變)或者是否存在另一種方法或注射選項可以做到這一點。
啊,現在爲什麼我沒有看github,這是有道理的。謝謝:) – thingygeoff
@thingygeoff所以你可以接受這個答案:) – j0k
啊哈!你已經更新了答案 - 一個理想的解決方案!謝謝 – thingygeoff