Skip to content

Commit

Permalink
Lean Mapper 4.1-RC1
Browse files Browse the repository at this point in the history
  • Loading branch information
janpecha committed Aug 7, 2024
1 parent 29e7766 commit 3c4a9ba
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
92 changes: 92 additions & 0 deletions _posts/2024-08-07-novinky-ve-verzi-4-1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
---
title: "Novinky ve verzi 4.1"
author: janpecha
---

{:.perex}
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:

```php
$book = new Book($row);
```

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

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

Nová verze přináší řešení v podobě traity `Initialize` a úpravě výchozí [EntityFactory](/cs/docs/entity-factory/), 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()`):

```php
/**
* @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.

```php
/**
* @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`.

```php
/**
* @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.**
12 changes: 12 additions & 0 deletions cs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ rank: 70

## [Vývojová verze](https://github.com/Tharos/LeanMapper/tree/develop)

* Entity: přidána traita `Initialize` ([#167](https://github.com/Tharos/LeanMapper/pull/167))

* Entity: přidána podpora pro typ `non-empty-string` u položek entity ([#167](https://github.com/Tharos/LeanMapper/pull/167))

* Entity: `settype()` nahrazeno vlastní metodou `Helpers::convertType()` ([#167](https://github.com/Tharos/LeanMapper/pull/167))

* Entity: opraveno pořadí volání kontroly typu a setter pass ([#167](https://github.com/Tharos/LeanMapper/pull/167))

* Entity: přidána podpora pro nullable syntaxi `?Foo` ([#167](https://github.com/Tharos/LeanMapper/pull/167))

* IEntityFactory: vylepšena návratová hodnota u metody `createCollection()` ([#167](https://github.com/Tharos/LeanMapper/pull/167))


## [4.0.5](https://github.com/Tharos/LeanMapper/tree/v4.0.3) (28. 11. 2023)

Expand Down

0 comments on commit 3c4a9ba

Please sign in to comment.