Webspire

Administrační systém

nw7 v2.2.0

Nová verze nw7 balíčku přináší rozšíření anotací entity o možnost definovat vlastní data a službu EntityPropertyCollectionResolver pro snadnější načtení dat odkazovaných z multiselect-entity.

Nový EntityPropertyCollectionResolver slouží pro snadnější práci s entitami odkazovanými přes multiselect. Typický případ použití je situace, kdy např. z entity článku potřebuji získat všechny jeho tagy ale tak, aby byly zabaleny v kolekci, nikoliv jako pole (za použití Collection::getEntitiesProperty()).

Příklad u ArticleEntity:

/**
 * @Property
 * @var ArticleArticleTagEntity[]
 * @ManyToMany(left)
 */
protected $articleArticleTagItems;


/**
 * @var Collection|ArticleTagEntity[]
 * @ManualProperty(lazyLoad = propertyCollectionResolver)
 * @PropertyData(lazyLoadProperty = articleArticleTagItems->r)
 */
protected $tags;

Na entitě článku existuje property $articleArticleTagItems, která zpřístupňuje vazebni multiselect entitu. Doposud, pokud člověk chtěl získat všechny tagy, byla nejjednodušší kombinace volání $article->articleArticleTagItems->getEntitiesProperty('r'). Toto volání však vrací pole, což v určitých situacích nemuselo být žádoucí (jelikož vstup vyžadoval kolekci, tedy instanci Collection).

Nyní lze získání kolekce tagů zkrátit zadefinováním lazy-loadované property, kde v @PropertyData anotaci předáme resolveru informaci, z jaké posloupnosti entit má kolekcí načíst - viz property $tags a hodnota atributu @PropertyData: lazyLoadProperty = resolver načte kolekci MS entit pod property articleArticleTagItems a nad touto kolekcí volá metody getEntitiesProperty() a předává jí zbytek posloupnosti volání (v tomto případě pouze "r"). Ve výsledku tedy pod property $tags bude vždy kolekce entity (v tomto případě ArticleTagEntity).

###message