我试图在symfony2中的每个字段之后添加一些帮助消息.
我在官方文档中读到了一个解决方案:http://symfony.com/doc/current/cookbook/form/form_customization.html#adding-help-messages
但是这个解决方案毫无意义,因为我们需要手动创建所有表单.例如,很容易定义标签:$formBuilder->add('myfieldname', 'text', array('label'=>'some my field label'));但如何传递帮助信息?(换句话说,一些自定义变量)
在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)
任何帮助将受到高度赞赏..
我正在使用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 2.3中为文本字段定义默认值.该表单用于创建和更新实体.在编辑模式下,应使用数据库给出的值,而不是默认值(当然).
编辑 这似乎是一个常见问题,很多人看过这篇文章如何在Symfony2中设置表单字段的默认值?
然而答案并不令人满意(对我来说):
所以我仍在寻找"完美"的方式,即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) 我有一个简单的问题.
我有一个带有字段的表单,例如:
$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 2中的表单类.
我创建了一个名为MyType(用于测试目的)的类,当我想将它添加到表单类时,我得到错误:
无法加载"MyType"类型.
我想我必须告诉Symfony加载那种类型,但我不知道怎么做!
我正在尝试访问父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?
如何显式打印CSRF字段而不是使用{{ form_rest(form) }}?
我需要这个,因为我将根据条件隐藏/显示一些字段,但是{{ form_rest(form) }}要打印所有剩余的字段(这是我想要避免的).
也许我错过了显而易见的但我怎么(或者我可以)将一个额外的"未绑定"字段添加到另一个绑定到实体的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()"都不存在,并且在课堂上有公共访问权限......
哪个是对的.我只是想用它来收集用户的一些额外信息,并用它做一些事情,而不是将它与实体一起存储.
我知道如何制作一个完全独立的形式,而不是一个"混合"的形式.这可能吗?
我的表单是我的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) symfony ×10
symfony-forms ×10
php ×3
doctrine-orm ×2
symfony-2.3 ×2
twig ×2
forms ×1
symfony-2.1 ×1
symfony-2.2 ×1