如何在symfony2中对多个选择字段进行排序

时间:2016-03-16 22:31:41

标签: php symfony

我有一个表格问题,字段“valeurs default”有所有问题的答案,这将是一个多选字段我的问题是添加(操作框)一个小按钮来订购答案,例如问题:“年龄”
- >单击订购按钮后将显示答案:
“20-> 25 25-> 30 30-> 35”
this is how it appears in my template

你可以帮我吗?

这是我的实体“问题”

class Question
 {/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;
/**
 * @var string
 *
 * @ORM\Column(name="Libelle", type="string", length=150)
 */
private $libelle;
  /**
 * @var string
 *
 * @ORM\Column(name="TypeQuestion", type="string", length=150)
 */
protected $TypeQuestion;

/**
 * @ORM\ManyToMany(targetEntity="tuto\BackofficeBundle\Entity\Service")
 */
protected $Service;

 /**
 * @ORM\ManyToMany(targetEntity="tuto\BackofficeBundle\Entity\ValeursDefault")
 */
protected $ValeursDefault;
/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}
/**
 * Set libelle
 *
 * @param string $libelle
 *
 * @return Question
 */
public function setLibelle($libelle)
{
    $this->libelle = $libelle;
    return $this;
}
/**
 * Get libelle
 *
 * @return string
 */
public function getLibelle()
{
    return $this->libelle;
}



/**
 * Constructor
 */
public function __construct()
{
    $this->Service = new \Doctrine\Common\Collections\ArrayCollection();
}


/**
 * Add Service
 *
 * @param \tuto\BackofficeBundle\Entity\Service $service
 * @return Question
 */
public function addService(\tuto\BackofficeBundle\Entity\Service $service)
{
    $this->Service[] = $service;
    return $this;
}
/**
 * Remove Service
 *
 * @param \tuto\BackofficeBundle\Entity\Service $service
 */
public function removeService(\tuto\BackofficeBundle\Entity\Service $service)
{
    $this->Service->removeElement($service);
}
/**
 * Get Service
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getService()
{
    return $this->Service;
}
/**
 * Add ValeursDefault
 *
 * @param \tuto\BackofficeBundle\Entity\ValeursDefault $valeursDefault
 * @return Question
 */
public function addValeursDefault(\tuto\BackofficeBundle\Entity\ValeursDefault $valeursDefault)
{
    $this->ValeursDefault[] = $valeursDefault;
    return $this;
}
/**
 * Remove ValeursDefault
 *
 * @param \tuto\BackofficeBundle\Entity\ValeursDefault $valeursDefault
 */
public function removeValeursDefault(\tuto\BackofficeBundle\Entity\ValeursDefault $valeursDefault)
{
    $this->ValeursDefault->removeElement($valeursDefault);
}
/**
 * Get ValeursDefault
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getValeursDefault()
{
    return $this->ValeursDefault;
}
/**
 * Set TypeQuestion
 *
 * @param string $typeQuestion
 * @return Question
 */
public function setTypeQuestion($typeQuestion)
{
    $this->TypeQuestion = $typeQuestion;
    return $this;
}
/**
 * Get TypeQuestion
 *
 * @return string 
 */
public function getTypeQuestion()
{
    return $this->TypeQuestion;
}
 }

the html.twig file

2 个答案:

答案 0 :(得分:1)

编写一个枝条扩展,将ValeursDefault分类为twig。这通常是我对嵌套对象的处理方式。

了解更多详情http://symfony.com/doc/current/cookbook/templating/twig_extension.html

在想要根据名为position的属性命令实体的子对象之前,我遇到了类似的问题,所以我写了这样的东西

public function orderPosition($arr) {
    $size = count($arr);
    for ($i = 0; $i < $size; $i++) {
        for ($j = 0; $j < $size - 1 - $i; $j++) {
            if ($arr[$j + 1]->getPosition() < $arr[$j]->getPosition()) {
                $this->swap($arr, $j, $j + 1);
            }
        }
    }
    return $arr;
}

对于您的情况,您将使用ValeursDefault中您想要排序的任何函数而不是getPosition()

答案 1 :(得分:1)

我认为您可以使用Doctrine对您的值进行排序:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/tutorials/ordered-associations.html

 /**
 * @ORM\ManyToMany(targetEntity="tuto\BackofficeBundle\Entity\ValeursDefault")
 * @ORM\OrderBy({"value" = "ASC"})
 */
protected $ValeursDefault;