Přeskočit na hlavní obsah

Read builder

Aneb metody pro čtení záznamů v kolekcích.

V přechozí kapitole jsme si ukázali, jak provést základní konfiguraci kolekce pomocí metod source a key. Nyní si ukážme metody read a readAll, již slouží k definici sloupců a API properties, a také pro formátování dat při čtení záznamů.

Výchozí konfigurace

Výchozí konfiguraci udává rodičovská třída CollectionRecipe a její konfigurace je totožná s tímto kódem:

app/Recipe/UserRecipe.php
class UserRecipe extends CollectionRecipe
{
// Definice sloupců (čtení jednotlivých záznamů)
public function read(ReadBuilder $builder, CollectionRequest $request): ReadBuilder
{
return $builder->buildByDbSchema();
}

// Definice sloupců (hromadné čtení záznamů)
public function readAll(ReadBuilder $builder, CollectionRequest $request): ReadBuilder
{
return $builder->buildByDbSchema();
}
}

Parametry metod

ParametrPopis
ReadBuilderObjekt, díky kterému lze definovat sloupce a jejich formátování (podrobnosti v odstavci ReadBuilder).
CollectionRequestObjekt, který obsahuje veškeré informace o aktuálním requestu prováděným nad kolekcí. Dostupné metody:
$request->getHttpRequest()
$request->isFormRendering()
$request->getRequestData()
$request->getSearchText()
$request->getCustomData()
$request->getRowId()
$request->getRowValues()

ReadBuilder

Read builder obsahuje množství metod. V zásadě ale budete používat jen několik z nich:

MetodaPopis metodyParametrPopis parametru
add(...)Přidá či přepíše column.IColumn $colKonkrétní column k přidání.
string $moveBeforeNamePřesune column před jiný.
string $moveAfterNamePřesune column za jiný.
buildByDbSchema(...)Vytvoří columns na základě databázového schématu.bool $persistPři prvním volání metody add(...) se odstraní veškeré automaticky vytvořené columns - tímto parametrem je možné toto chování potlačit.
string[] $excludeNázvy columns, které nechcete vytvářet.
ignoreFormatters(...)Vyignoruje pravidla formátování konkrétních columns.class-string[][] $formattersAsociativní pole, kde klíč je název columnu a hodnota je pole formatterů (class-names), které chcete vynechat.

Podrobnější konfigurace

Prozatím není potřeba se zabývat detailní definicí jednotlivých sloupců - o těch si povíme v kapitole columns. Nyní jde hlavně o pochopení toho, že v metodách read a readAll můžete definovat sloupce (potažmo propeties), které mají být dostupné v API a tedy i v datagridu.

app/Recipe/UserRecipe.php
class UserRecipe extends CollectionRecipe
{
// V konstruktoru můžete využít DI kontejneru
public function __construct(protected EntityManager $em)
{
}

public function read(ReadBuilder $builder, CollectionRequest $request): ReadBuilder
{
return $builder
->buildByDbSchema(exclude: ['password', 'email'], persist: true)
->add(new EmailColumn(
key: 'email',
name: 'E-mail',
formatters: [
new CallableFormatter(fn($value) => 'mailto:' . $value),
]
))
//->add(...)
//->add(...)
;
}

public function readAll(ReadBuilder $builder, CollectionRequest $request): ReadBuilder
{
return $builder
->buildByDbSchema(exclude: ['password', 'email'], persist: true)
->add(
new EmailColumn(
key: 'email',
name: 'E-mail'
),
moveBeforeKey: 'lastLogin'
)
//->add(...)
//->add(...)
;
}
}