好吧,说实话。不喜欢symfony决定采用他们的核心文件的一些决定,所以我试图覆盖它们。例如
Symfony/Component/Form/Extension/Core/Type/FieldType.php
即时尝试更改FormView具有父级时呈现的名称,因为它们执行了一些很酷的字符串格式化...
我只是想做到这一点,$fullName
和$id
都是$form->getName()
;
public function buildView(FormView $view, FormInterface $form)
{
$name = $form->getName();
if ($view->hasParent()) {
$parentId = $view->getParent()->get('id');
$parentFullName = $view->getParent()->get('full_name');
// Custom Logic
//$id = sprintf('%s_%s', $parentId, $name);
//$fullName = sprintf('%s[%s]', $parentFullName, $name);
$id = $form->getName();
$fullName = $form->getName();
} else {
$id = $name;
$fullName = $name;
}
$types = array();
foreach ($form->getTypes() as $type) {
$types[] = $type->getName();
}
$view
->set('form', $view)
->set('id', $id)
->set('name', $name)
->set('full_name', $fullName)
->set('errors', $form->getErrors())
->set('value', $form->getClientData())
->set('read_only', $form->isReadOnly())
->set('required', $form->isRequired())
->set('max_length', $form->getAttribute('max_length'))
->set('pattern', $form->getAttribute('pattern'))
->set('size', null)
->set('label', $form->getAttribute('label'))
->set('multipart', false)
->set('attr', $form->getAttribute('attr'))
->set('types', $types)
;
}
答案 0 :(得分:1)
我认为您可以尝试建立自己的表单类型。
您可以将自己的表单类型放到Bundle中,使其具有干净的结构(“TestBundle / Form / Type”)。
在此字段类型中,您可以进行所需的更改。
How can I make a custom field type in symfony2?
这是一篇有用的帖子,显示热门以制作自定义字段类型。
这是一个简短的提示,我希望你能找到一个好的解决方案,并告诉我们它的工作原理以及你是如何解决的。
答案 1 :(得分:0)
构建了一个辅助函数。
public function fixForm(\Symfony\Component\Form\FormView $form)
{
foreach($form as &$child)
{
$name = $child->get('full_name');
$id = $child->get('id');
$matches = array();
preg_match('/^(?<form>.+)\[(?<ele>.+)\]/', $name, $matches);
if(isset($matches['ele']))
$child->set('full_name', $matches['ele']);
$matches = array();
preg_match('/^(?<first>.+)_(?<second>.+)/', $id, $matches);
if(isset($matches['second']))
$child->set('id', $matches['second']);
}
return $form;
}
及其工作。只需在需要修复表单时调用它