标签: symfony-forms

在Twig中自定义小部件的ID属性

在渲染窗口小部件时,是否可以在Twig中自定义HTML'id'属性 {{ form_widget(form.NAME_OF_THE_FIELD) }}

传球{'attr': {'id': 'SOMETHING'}}不起作用......

感谢帮助!

symfony-forms symfony

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

Symfony2:如何在自定义复合表单类型上使用约束?

这是一个我一直在讨厌的问题.请知道我还不是Symfony2专家,所以我可能在某个地方犯了一个菜鸟错误.

Field1:标准Symfony2 text字段类型

Field2:compoundtext字段+ 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)

php constraints symfony-forms symfony symfony-2.4

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

具有EAV返回值的Symfony2形式动态选择字段

我正在使用Symfony2和Doctrine2创建一个电子商务包.我正在应用EAV方法来获得无限功能的产品功能和产品价值.为此,我有三个基本实体:Product,FeatureKind和FeatureValues.

  • FeatureKind与FeatureValues连接,具有OneToMany单向关系.
  • 产品通过ManyToMany关系连接到FeatureKind.

问题是我需要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)

php oop symfony-forms symfony

15
推荐指数
1
解决办法
4029
查看次数

在Symfony 2中为集合的每个项目指定不同的验证组?

[ 关于收集的文档 ]当嵌入表单(集合类型)可以为每个项目指定验证组时,基于当前项目?它似乎不适用于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)

php symfony-forms symfony doctrine-orm symfony-2.3

15
推荐指数
1
解决办法
3550
查看次数

Symfony2:使用实体字段类型访问Twig中的实体字段

这是我的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)

...其中moneyLeftname是来自User实体的字段.

symfony-forms symfony twig

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

Symfony2中多文件上载的问题

我正在制作一个需要多个图像上传选项的Symfony2应用程序.我使用cookbook条目上传了单个文件:如何使用Doctrine处理文件上传,工作正常.我已经实现了lifecyclecallbacks上传和删除.

现在我需要把它变成一个多重上传系统.我也从Stack Overflow中读到了一些答案,但似乎没有任何效果.

堆栈溢出问题:

  1. 使用Symfony2上传多个文件
  2. 多文件上传symfony 2

我现在有以下代码:

文件实体:

<?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)

php file-upload symfony-forms symfony doctrine-orm

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

在Symfony中修改绑定表单数据的建议位置是哪个?

我有一个创建新的表单Customer.客户可能拥有手机号码.移动号码应该没有+00用户可以键入的前缀.这可以通过以下方式轻松完成:

$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile()));
Run Code Online (Sandbox Code Playgroud)

放置此代码的最佳位置是哪个?

  • CustomerController调用实体管理器之前并保持实体.这真的是MVC模式中的控制器问题吗?
  • 使用SanitizeCustomerSubscriber和听取FormEvents:POST_BIND事件
  • 使用CustomerSanitizer服务

还有其他想法吗?当然,我说的是一般的数据操作,手机号码只是一个例子:要消毒的字段可能不仅仅是一个.

symfony-forms symfony

14
推荐指数
2
解决办法
8479
查看次数

symfony2自定义表单选择选项

我正在尝试使用简单的表单添加名称和颜色的活动.

所以我想制作一个带有一些颜色数组的列表,现在它正在工作我有颜色的名称.
我可以在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 optionselect标签添加自定义attr (而不是标签).
注意:我不想使用JavaScript.我想使用symfony2 FormBuilder来自定义我的选择选项.

php symfony-forms symfony

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

Symfony表单query_buider和实体存储库

我正在尝试创建一个包含收集类型数据的表单,具体取决于所记录的用户.我正在关注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中的注释" …

dql query-builder symfony-forms symfony

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

Symfony2:集合中的单选按钮

在我的应用程序中,我使用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-forms symfony

14
推荐指数
2
解决办法
7578
查看次数