标签: symfony-forms

向字段添加"帮助"消息

我试图在symfony2中的每个字段之后添加一些帮助消息.

我在官方文档中读到了一个解决方案:http://symfony.com/doc/current/cookbook/form/form_customization.html#adding-help-messages

但是这个解决方案毫无意义,因为我们需要手动创建所有表单.例如,很容易定义标签:$formBuilder->add('myfieldname', 'text', array('label'=>'some my field label'));但如何传递帮助信息?(换句话说,一些自定义变量)

symfony-forms symfony

26
推荐指数
3
解决办法
2万
查看次数

如何从控制器传递参数到FormType构造函数

在Symfony2.7中,我可以在创建表单时直接从控制器将参数传递给Form Type构造函数,但是在Symfony3中我无法做到!

在Symfony2.7之前

$form = $this->createForm(new NewsType("posted_by_name"));
Run Code Online (Sandbox Code Playgroud)

在Symfony3之后

$form = $this->createForm(NewsType::class); // no idea how to pass parameter?
Run Code Online (Sandbox Code Playgroud)

更新: 我还想从以下位置访问它:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    // how to access posted_by_name here which is sent from controller
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏..

symfony-forms symfony

25
推荐指数
3
解决办法
2万
查看次数

从Symfony2/Twig中的2位数国家代码中获取翻译的国家/地区名称?

我正在使用Symfony2 国家/地区字段类型,它运行良好并且国家/地区名称已翻译.我将两位数的国家/地区代码存储在country我的实体列中.

如何显示完整的已翻译国家/地区名称?这是我将字段添加到表单的方式:

$builder
    ->add('country', 'country', array(
        'label' => 'Paese', 'preferred_choices' => array('IT')
    ));
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中:

$user = $this->getDoctrine()->getRepository('AcmeHelloBundle:User');
$countryCode = $user->getCountry();
$countryName = null; // Get translated country name from code
Run Code Online (Sandbox Code Playgroud)

或者在我的树枝模板中:

{# Output the country code and name #}
{{ user.country }}

{# translated country name from code #}
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony twig

24
推荐指数
7
解决办法
2万
查看次数

使用Symfony 2中的表单类设置默认值

我试图在Symfony 2.3中为文本字段定义默认值.该表单用于创建和更新实体.在编辑模式下,应使用数据库给出的值,而不是默认值(当然).

编辑 这似乎是一个常见问题,很多人看过这篇文章如何在Symfony2中设置表单字段的默认值?

然而答案并不令人满意(对我来说):

  • 使用data属性是"错误的",它将始终被使用,不仅在表单元素没有值时
  • 使用if - then - else方法使用data属性(虽然答案中的语法是错误的).我怀疑这是应该在Symfony中完成的方式.
  • 另一个建议是在模型中设置默认值,如"protected $ foo ='myValue'".这适用于某些字段类型(例如文本字段)但不是全部.
  • 使用EventListeners可能会起作用,但它的工作量非常大,以至于它无法成为此基本任务的预期方式
  • 如果您使用form_widget标记,则在树枝模板中设置它不起作用,如果您在不同模板中使用该表单,则必须多次设置它

所以我仍在寻找"完美"的方式,即Symfony开发人员提供的方式(必须有一个,这是一个基本要求).

这是我到目前为止,但它不起作用(表单中没有默认值).这是正确的方法吗?

// Acme\DemoBundle\Form\ProjectType.php
class ProjectType extends AbstractType
{

    public function __construct(array $options = array())
    {
        $resolver = new OptionsResolver();
        $this->setDefaultOptions($resolver);
        $this->options = $resolver->resolve($options);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('color', 'text', array(
                "label" => "Color:"
            )
        );
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            "color" => "#0000FF"
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony-2.3

24
推荐指数
0
解决办法
2万
查看次数

Symfony2 - > Twig - > Form - > Field - > Set rendered = true

我有一个简单的问题.

我有一个带有字段的表单,例如:

$builder
    ->add('x')
    ->add('y')
    ->add('z')
;
Run Code Online (Sandbox Code Playgroud)

在我的twig文件中,我使用了多个块,我想停止渲染字段...我查看了b.html.twig文件!

a.html.twig

{% block body %}
    {% block form %}
        {{ form_widget(form) }}
    {% endblock form %}
{% endblock body %}
Run Code Online (Sandbox Code Playgroud)

b.html.twig

{% block form %}
    {{ form.x.set('rendered', true) | default() }}
    {{ parent() }}
{% endblock form %}
Run Code Online (Sandbox Code Playgroud)

如果我删除"default()"我得到错误,该对象不能转换为字符串.实际上,表单呈现所有字段......包含x字段.但他们不应该渲染x字段......

先感谢您!

symfony-forms symfony twig symfony-2.2 symfony-2.3

23
推荐指数
2
解决办法
2万
查看次数

Symfony2:无法加载"MyType"类型

我正在尝试创建一个新的字段类型并将其添加到Symfony 2中的表单类.

我创建了一个名为MyType(用于测试目的)的类,当我想将它添加到表单类时,我得到错误:

无法加载"MyType"类型.

我想我必须告诉Symfony加载那种类型,但我不知道怎么做!

symfony-forms symfony

22
推荐指数
1
解决办法
2万
查看次数

Symfony表单 - 子条目内的访问实体键入CollectionType

我正在尝试访问父CollectionType内部给定嵌入式表单的实体FormBuilder:

ParentType的

Class ParentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

ChildType

class ChildType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $child = $builder->getData(); // this returns null
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Vendor\Bundle\Entity\Child',
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这是以正常形式工作,$child但返回为null.我怎样才能访问Child里面的实体ChildType

php symfony-forms symfony doctrine-orm

22
推荐指数
1
解决办法
2万
查看次数

显式打印CSRF令牌字段而不是form_rest(表单)?

如何显式打印CSRF字段而不是使用{{ form_rest(form) }}

我需要这个,因为我将根据条件隐藏/显示一些字段,但是{{ form_rest(form) }}要打印所有剩余的字段(这是我想要避免的).

forms symfony-forms symfony

21
推荐指数
1
解决办法
1万
查看次数

如何向Symfony中的表单添加未绑定字段,否则绑定到实体?

也许我错过了显而易见的但我怎么(或者我可以)将一个额外的"未绑定"字段添加到另一个绑定到实体的Symfony表单中?

假设我有一个带字段first_name和实体的实体last_name.我在表单类buildForm方法中做了典型的事情.

$builder
    ->add('first_name')
    ->add('last_name')
;
Run Code Online (Sandbox Code Playgroud)

这在我的控制器中:

$editForm = $this->createForm(new MyType(), $entity);
Run Code Online (Sandbox Code Playgroud)

这很好用,但我想添加另一个文本框,让我们称之为"额外",并在POST操作中接收值.如果我这样做$builder->add('extra')?,那就抱怨了

PropertyAccessor.php第479行中的NoSuchPropertyException:

属性"extra"或方法"getExtra()","extra()","isExtra()","hasExtra()","__ get()"都不存在,并且在课堂上有公共访问权限......

哪个是对的.我只是想用它来收集用户的一些额外信息,并用它做一些事情,而不是将它与实体一起存储.

我知道如何制作一个完全独立的形式,而不是一个"混合"的形式.这可能吗?

symfony-forms symfony symfony-2.1

21
推荐指数
2
解决办法
2万
查看次数

操作方法:优化Symfony表单的性能?

我的表单是我的ajax请求的瓶颈.

    $order = $this->getDoctrine()
        ->getRepository('AcmeMyBundle:Order')
        ->find($id);
    $order = $order ? $order : new Order();

    $form = $this->createForm(new OrderType(), $order);

    $formView = $form->createView();

    return $this->render(
        'AcmeMyBundle:Ajax:order_edit.html.twig',
        array(
            'form' => $formView,
        )
    );
Run Code Online (Sandbox Code Playgroud)

为了更清晰的代码我删除了stopwatch语句.

我的OrderType有下一个字段:

    $builder
        ->add('status') // enum (string)
        ->add('paid_status') // enum (string)
        ->add('purchases_price') // int
        ->add('discount_price') // int
        ->add('delivery_price') // int
        ->add('delivery_real_price', null, array('required' => false)) // int
        ->add('buyer_name') // string
        ->add('buyer_phone') // string
        ->add('buyer_email') // string
        ->add('buyer_address') // string
        ->add('comment') // string
        ->add('manager_comment') // string …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony doctrine-orm

21
推荐指数
1
解决办法
2689
查看次数