Php 覆盖核心Symfony2组件

Php 覆盖核心Symfony2组件,php,symfony,Php,Symfony,好吧,说实话。不喜欢symfony决定对其核心文件做出的一些决定,所以我试图覆盖它们。比如说 Symfony/Component/Form/Extension/Core/Type/FieldType.php 如果FormView有父对象,我会尝试更改呈现的名称,因为它们会进行一些很酷的字符串格式化 我只是想让$fullName和$id都是$form->getName() 我认为您可以尝试构建自己的表单类型 您可以将自己的表单类型放入Bundle,使其具有类似(“TestBundle/Form/T

好吧,说实话。不喜欢symfony决定对其核心文件做出的一些决定,所以我试图覆盖它们。比如说

Symfony/Component/Form/Extension/Core/Type/FieldType.php

如果FormView有父对象,我会尝试更改呈现的名称,因为它们会进行一些很酷的字符串格式化

我只是想让
$fullName
$id
都是
$form->getName()


我认为您可以尝试构建自己的表单类型

您可以将自己的表单类型放入Bundle,使其具有类似(“TestBundle/Form/Type”)的干净结构

在此字段类型中,您可以进行所需的更改

下面是一篇帮助性文章,它显示了如何创建自定义字段类型


这是一个简短的提示,我希望您能找到一个好的解决方案,并告诉我们它是否有效以及您是如何解决的。

我认为您可以尝试构建自己的表单类型

您可以将自己的表单类型放入Bundle,使其具有类似(“TestBundle/Form/Type”)的干净结构

在此字段类型中,您可以进行所需的更改

下面是一篇帮助性文章,它显示了如何创建自定义字段类型


这是一个简短的提示,我希望您能找到一个好的解决方案,并能告诉我们它是否有效以及您是如何解决的。

构建了一个帮助函数

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;
}
public function fixForm(\Symfony\Component\Form\FormView$Form)
{
foreach($formas&$child)
{
$name=$child->get('full_name');
$id=$child->get('id');
$matches=array();
预匹配('/^(?.+)\[(?.+)\]/',$name,$matches);
if(isset($matches['ele']))
$child->set('full_name',$matches['ele']);
$matches=array();
preg_match(“/^(?.+)(?.+)/”,$id,$matches);
if(isset($matches['second']))
$child->set('id',$matches['second']);
}
返回$表格;
}

以及它的工作原理。当您需要修复表单时,只需调用此函数即可

生成帮助函数

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;
}
public function fixForm(\Symfony\Component\Form\FormView$Form)
{
foreach($formas&$child)
{
$name=$child->get('full_name');
$id=$child->get('id');
$matches=array();
预匹配('/^(?.+)\[(?.+)\]/',$name,$matches);
if(isset($matches['ele']))
$child->set('full_name',$matches['ele']);
$matches=array();
preg_match(“/^(?.+)(?.+)/”,$id,$matches);
if(isset($matches['second']))
$child->set('id',$matches['second']);
}
返回$表格;
}

以及它的工作原理。当您需要修复表单时,只需调用此函数

不幸的是,我所做的更改需要对每个字段类型进行更改。我希望避免仅仅为了更改名称而重写所有字段类型。您有没有想过在Twig中解决这个问题?有一些方法可以自定义表单并更改模板中的字段。正如我上面所说的,在twig中进行此操作需要我更改所有的
表单小部件
,我试图避免这种情况,不幸的是,我所做的更改需要对每个字段类型进行更改。我希望避免仅仅为了更改名称而重写所有字段类型。您有没有想过在Twig中解决这个问题?有一些方法可以自定义表单并更改模板中的字段。就像我上面所说的,在twig中做这件事需要我更改所有的
表单小部件
,我试图避免这种情况