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
Parametr | Popis |
---|---|
ReadBuilder | Objekt, díky kterému lze definovat sloupce a jejich formátování (podrobnosti v odstavci ReadBuilder). |
CollectionRequest | Objekt, 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:
Metoda | Popis metody | Parametr | Popis parametru |
---|---|---|---|
add(...) | Přidá či přepíše column. | IColumn $col | Konkrétní column k přidání. |
string $moveBeforeName | Přesune column před jiný. | ||
string $moveAfterName | Přesune column za jiný. | ||
buildByDbSchema(...) | Vytvoří columns na základě databázového schématu. | bool $persist | Př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[] $exclude | Názvy columns, které nechcete vytvářet. | ||
ignoreFormatters(...) | Vyignoruje pravidla formátování konkrétních columns. | class-string[][] $formatters | Asociativní 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(...)
;
}
}