Неизменные коллекции в Doctrine 2? - PullRequest
5 голосов
/ 11 сентября 2011

Я ищу способ вернуть неизменную коллекцию из объекта домена в Doctrine 2. Давайте начнем с этого примера из doc :

class User
{
    // ...

    public function getGroups()
    {
        return $this->groups;
    }
}

// ...
$user = new User();
$user->getGroups()->add($group);

С точки зрения DDD , если User является совокупным корнем, то мы бы предпочли:

$user = new User();
$user->addGroup($group);

Но, тем не менее, если нам действительно нужен метод getGroups(), то в идеале мы не хотим возвращать внутреннюю ссылку на коллекцию, поскольку это может позволить кому-то обойти метод addGroup().

Есть ли встроенный способ возврата неизменяемой коллекции вместо создания собственного неизменяемого прокси коллекции? Такие как ...

    public function getGroups()
    {
        return new ImmutableCollection($this->groups);
    }

Ответы [ 2 ]

5 голосов
/ 20 апреля 2013

Самый простой (и рекомендуемый) способ сделать это - toArray () :

return $this->groups->toArray();
0 голосов
/ 11 сентября 2011

Я полагаю, что самый простой способ достичь этого - использовать iterator_to_array.

iterator_to_array преобразует повторяемые объекты в массивы, поэтому вместо непосредственного возврата коллекции вы 'd просто сделайте return iterator_to_array($this->foo);.

Это дает дополнительный бонус, позволяющий использовать функции, такие как array_map, в возвращаемых списках, поскольку они не работают с объектами, подобными массиву.

...