在渲染窗口小部件时,是否可以在Twig中自定义HTML'id'属性
{{ form_widget(form.NAME_OF_THE_FIELD) }}?
传球{'attr': {'id': 'SOMETHING'}}不起作用......
感谢帮助!
这是一个我一直在讨厌的问题.请知道我还不是Symfony2专家,所以我可能在某个地方犯了一个菜鸟错误.
Field1:标准Symfony2 text字段类型
Field2:compound带text字段+ checkbox字段的自定义字段类型字段)

我的目标:在autoValue实地工作中加入限制autoValue's text input child
约束不起作用的原因可能是因为NotBlank期望字符串值并且此表单字段的内部数据是数组array('input'=>'value', 'checkbox' => true).此数组值将转换回具有自定义的字符串DataTransformer.但我怀疑在根据已知约束验证字段后会发生这种情况.
正如您在注释代码中看到的那样,我已经能够在文本输入上获得约束,但是只有当硬编码到autoValue的表单类型中时,我才能根据主要字段的约束进行验证.
控制器和字段的我(简化)示例代码:
.
设置快速表单以进行测试.
<?php
//...
// $entityInstance holds an entity that has it's own constraints
// that have been added via annotations
$formBuilder = $this->createFormBuilder( $entityInstance, array(
'attr' => array(
// added to disable html5 validation
'novalidate' => 'novalidate'
)
));
$formBuilder->add('regular_text', 'text', array(
'constraints' => array(
new \Symfony\Component\Validator\Constraints\NotBlank() …Run Code Online (Sandbox Code Playgroud) 我正在使用Symfony2和Doctrine2创建一个电子商务包.我正在应用EAV方法来获得无限功能的产品功能和产品价值.为此,我有三个基本实体:Product,FeatureKind和FeatureValues.
问题是我需要FeatureType作为标签,它的各种值作为产品形式的选择字段.我已设法在产品表单中获取featurekind和相关值,但我不知道如何将它们转换为选择字段.
以下是所有三个实体,控制器和表单代码以及我的代码的结果.
注意:我已从代码中删除了额外的东西以保持简短.
Product.php
namespace Webmuch\ProductBundle\Entity;
/**
* @ORM\Table()
* @ORM\Entity
*/
class Product
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @ORM\ManyToMany(targetEntity="FeatureKind", inversedBy="product", cascade={"persist"})
* @ORM\JoinTable(name="product_featurekind")
**/
private $featurekind;
}
Run Code Online (Sandbox Code Playgroud)
FeatureKind.php
namespace Webmuch\ProductBundle\Entity;
/**
* @ORM\Table(name="feature_kind")
* @ORM\Entity
*/
class FeatureKind
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="name", type="string", length=50)
*/
protected $name; …Run Code Online (Sandbox Code Playgroud) [ 关于收集的文档 ]当嵌入表单(集合类型)可以为每个项目指定验证组时,基于当前项目?它似乎不适用于ATM.
的TaskType形式添加的标签的集合:
// src/Acme/TaskBundle/Form/Type/TaskType.php
// ...
public function buildForm(FormBuilderInterface $builder, array $options)
{
// ...
$builder->add('tags', 'collection', array(
// ...
'by_reference' => false,
));
}
Run Code Online (Sandbox Code Playgroud)
例如,我们有两个标签(标签1和标签2),并使用"添加"按钮(通过JavaScript)添加新标签:
-----------
| add tag |
-----------
- tag 1 (existing)
- tag 2 (added clicking the "add tag" button)
Run Code Online (Sandbox Code Playgroud)
标签1应该针对组进行验证Default,Edit而标签2 Default仅针对组进行验证.
TagType 定义动态验证组的表单根据基础数据,如果tag是new,则获取Defaultgroup(如果存在Default)Creategroup:
// ...
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$tag …Run Code Online (Sandbox Code Playgroud) 这是我的FormType:
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('user', 'entity', array(
'class' => 'UserBundle:User',
'expanded' => true,
'property' => 'name',
));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在视图(Twig)中访问用户的字段?
我想做这样的事情:
{% for u in form.user %}
{{ form_widget(u) }}
{{ form_label(u) }}
{% if u.moneyLeft > 0 %}
<span>{{ u.name }} : {{ u.moneyLeft }} €</span>
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
...其中moneyLeft和name是来自User实体的字段.
我正在制作一个需要多个图像上传选项的Symfony2应用程序.我使用cookbook条目上传了单个文件:如何使用Doctrine处理文件上传,工作正常.我已经实现了lifecyclecallbacks上传和删除.
现在我需要把它变成一个多重上传系统.我也从Stack Overflow中读到了一些答案,但似乎没有任何效果.
堆栈溢出问题:
我现在有以下代码:
文件实体:
<?php
namespace Webmuch\ProductBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class File
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $path;
/**
* @Assert\File(maxSize="6000000")
*/
public $file = array();
public function __construct()
{
}
/**
* Get id
*
* @return integer
*/
public function getId()
{ …Run Code Online (Sandbox Code Playgroud) 我有一个创建新的表单Customer.客户可能拥有手机号码.移动号码应该没有+或00用户可以键入的前缀.这可以通过以下方式轻松完成:
$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile()));
Run Code Online (Sandbox Code Playgroud)
放置此代码的最佳位置是哪个?
CustomerController调用实体管理器之前并保持实体.这真的是MVC模式中的控制器问题吗?SanitizeCustomerSubscriber和听取FormEvents:POST_BIND事件CustomerSanitizer服务还有其他想法吗?当然,我说的是一般的数据操作,手机号码只是一个例子:要消毒的字段可能不仅仅是一个.
我正在尝试使用简单的表单添加名称和颜色的活动.
所以我想制作一个带有一些颜色数组的列表,现在它正在工作我有颜色的名称.
我可以在select标签中添加任何属性:
$form = $this->createFormBuilder($myclass)
->add('Colors','choice',array('label'=>'select some colors',
'multiple'=>true,
'choices'=>array(1=>'red', 2=>'blue', 3=>'green'),
'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata')
));
Run Code Online (Sandbox Code Playgroud)
输出将是这样的:
<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata">
<option value="1">red</option>
<option value="2">blue</option>
<option value="3">green</option>
</select>
Run Code Online (Sandbox Code Playgroud)
但是,如何添加selected="selected"我想要的任何属性以及我的选择选项?像这样:
<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata">
<option style="background-color: #F00;" value="1" selected="selected">red</option>
<option style="background-color: #00F;" value="2" selected="selected">blue</option>
<option style="background-color: #0F0;" value="3">green</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何通过symfony FormBuilder option为select标签添加自定义attr (而不是标签).
注意:我不想使用JavaScript.我想使用symfony2 FormBuilder来自定义我的选择选项.
我正在尝试创建一个包含收集类型数据的表单,具体取决于所记录的用户.我正在关注Symfony食谱的这一章.
当query_builder选项是一个闭包,我从DQL获取数据时,一切正常.由于需要从代码中的不同位置获取数据,我更愿意在Repository类中定义查询.
这是我的存储库中的函数:
public function findOwnedBy($user) {
$query = $this->getEntityManager()->createQuery("SELECT l FROM MyBundle:Article a JOIN a.owndBy u WHERE u.id = :userId");
$query->setParameters(array("userId"=>$user->getId()));
return $query->getResult();
}
Run Code Online (Sandbox Code Playgroud)
在Controller中调用并返回Article数组时,此函数有效.这是symfony doc的片段:
$formOptions = array(
'class' => 'Acme\DemoBundle\Entity\User',
'multiple' => false,
'expanded' => false,
'property' => 'fullName',
'query_builder' => function(EntityRepository $er) use ($user) {
// build a custom query, or call a method on your repository (even better!)
},
);
Run Code Online (Sandbox Code Playgroud)
当我在query_builder中调用我的Repository函数时,我收到一个错误:Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given我可以理解,因为我的Repository返回一个Entity数组,而不是QueryBuilder.
我不想在表单中复制代码并创建新的QueryBuilder.从存储库中使用查询的最佳做法是什么?我想在存储库中有两个函数,一个返回一个数组,另一个返回QueryBuilder,但是Symfony doc中的注释" …
在我的应用程序中,我使用collection字段类型创建了一个表单:
$builder->add('tags', 'collection', array(
'type' => new TagType(),
'label' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
));
Run Code Online (Sandbox Code Playgroud)
使用一些JQuery,这段代码可以正常工作,但现在我想选择一个这个动态标签,使其成为"主要标签".
在我的Tag实体中,我添加了一个布尔属性,用于定义标记是否为main:
/**
* @ORM\Column(name="main", type="boolean")
*/
private $main;
Run Code Online (Sandbox Code Playgroud)
但在我看来,每行现在都包含一个复选框.所以我可以选择多个主标签.如何在单选按钮中转换此复选框?
symfony ×10
symfony-forms ×10
php ×5
doctrine-orm ×2
constraints ×1
dql ×1
file-upload ×1
oop ×1
symfony-2.3 ×1
symfony-2.4 ×1
twig ×1