Как реализовать класс ENUM для Symfony 2.7, как в документации?

Просматривая документацию для интерфейса поля формы Выбор в Symfony 2.7, я постоянно замечаю следующий фрагмент верх этой страницы:

$builder->add('attending', 'choice', array(
'choices' => array(
Status::getInstance(Status::YES),
Status::getInstance(Status::NO),
Status::getInstance(Status::MAYBE),
),
'choices_as_values' => true,
'choice_label' => 'displayName',
));

Status по существу реализует класс enum в PHP. Кажется, в Symfony нет интерфейса для этого. Кто-нибудь знает, как элегантно реализовать то, что работает как Status и что позволяет добавлять больше значений в одном месте?

3

Решение

class Status {

const STATUS_YES = 1;
const STATUS_MAYBE = 2;
const STATUS_NO = 3;

private $enum;

static public function getInstance($var)
{
return new static($var);
}

private function __construct($var)
{
$this->enum = $var;
}

/**
* @returns boolean
*/
public function is($var)
{
return ($this->enum == $var);
}
}

Если вы хотите, вы можете использовать Status в качестве абстрактного класса, наследовать все Status от этого класса и возвращать соответствующий объект.

1

Другие решения

С симфонией мы можем использовать аннотации и учение о вашей сущности. Не забудьте назвать «Doctrine \ ORM \ Mapping as ORM»

Вы должны иметь больше информации с symfony docs: http://symfony.com/blog/symfony2-annotations-gets-better

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections as Collection;

/**
* Class Person
*
* @package MyPackage\MyBundle\Entity
*
* @author Mirouf
*
* @ORM\Table(name="t_persons")
* @ORM\Entity(repositoryClass="MyPackage\MyBundle\Repository\PersonRepository")
* @ORM\HasLifecycleCallbacks()
*/

class Person {
const TYPE_DIVORCED = 'divorced';
const TYPE_MARRIED = 'married';
const TYPE_SINGLE = 'single';

/**
* @var integer
*
* @ORM\Column(name="id", type="integer", options={"comment"="Id of the person"})
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=35, options={"comment"="Name of the person"})
*/

private $number;
/**
* @var string
*
* @ORM\Column(name="relationshipStatus", nullable=true, options={"comment"="relationshipStatus"}, columnDefinition="ENUM('divorced', 'married', 'single')")
*/
private $relationshipStatus;

/**
* Get relationshipStatus
*
* @return string
*/
public function getRelationshipStatus()
{
return $this->relationshipStatus;
}

/**
* Set relationshipStatus
*
* @param string $relationshipStatus
*
* @return Person
*/
public function setRelationshipStatus($relationshipStatus)
{
$this->relationshipStatus = $relationshipStatus;

return $this;
}
}

Я не видел этот пост раньше, у меня такая же проблема, так что если бы я мог помочь кому-то!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector