Novinky ve verzi 4.1

Chystaná verze 4.1 přinese řadu užitečných novinek.

Použití konstruktoru u entit

Konstruktor entity je aktuálně používán k vytvoření entity z pole dat či databázového řádku:

$book = new Book($row);

To však není optimální, pokud chceme konstruktor použít pro vlastní způsob inicializace entity:

$book = new Book($name, $author);

Nová verze přináší řešení v podobě traity Initialize a úpravě výchozí EntityFactory, která zajistí, že entita, která tuto traitu používá bude při načítání dat z databáze vytvářena odlišným způsobem bez volání konstruktoru.

Stačí jen v entitě (či předkovi) traitu použít (a nezapomenout v konstrukturu zavolat parent::__construct()):

/**
 * @property int $id
 * @property string $name
 * @property Author $author m:hasOne
 */
class Book extends \LeanMapper\Entity
{
	use \LeanMapper\Initialize;


	public function __construct(
		string $name,
		Author $author
	)
	{
		parent::__construct();

		$this->name = $name;
		$this->author = $author;
	}
}

Podpora pro typ non-empty-string

U položek entity je nově možné kromě typu string používat i typ non-empty-string. Lean Mapper pak vynucuje, aby předaná hodnota byla skutečně neprázdný řetězec.

/**
 * @property non-empty-string $name
 */
class Author extends \LeanMapper\Entity
{
}

Je to první krok k podpoře šiřšího spektra typů v položkách entit.

Označení nullable položek v entitě

Drobně vylepšen byl parser typů v anotacích, který kromě zápisu Foo|null nově u nullable položek rozumí i zápisu ?Foo.

/**
 * @property ?Author $author m:hasOne
 * @property ?int $year
 */
class Book extends \LeanMapper\Entity
{
}

Vylepšení pro statickou analýzu

Drobné úpravy doznalo i rozhraní IEntityFactory, u kterého byla lépe specifikována návratová hodnota z metody createCollection() - původní Entity[] bylo nahrazeno za iterable<Entity>, které by mělo lépe odpovídat realitě.

V souvislosti s tím došlo ke stejné úpravě i u metod Entity::getHasManyValue(), Entity::getBelongsToManyValue() a Repository::createEntities().


Verze 4.1 je aktuálně v RC fázi - vyzkoušejte ji prosím na svých projektech, pokud se neobjeví žádná komplikace, vyjde cca za týden stabilní verze.