taktik-nette
This commit is contained in:
31
app/UI/DTO/FilterDTO.php
Normal file
31
app/UI/DTO/FilterDTO.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\UI\DTO;
|
||||
|
||||
class FilterDTO
|
||||
{
|
||||
/**
|
||||
* @param array<string, mixed> $filters
|
||||
*/
|
||||
public function __construct(public readonly array $filters = [])
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed>|null $data
|
||||
* @param array<int, string> $acceptFilters
|
||||
* @return FilterDTO
|
||||
*/
|
||||
public static function createFromData(?array $data, array $acceptFilters = []): FilterDTO
|
||||
{
|
||||
if ($data === null) {
|
||||
return new self([]);
|
||||
}
|
||||
|
||||
$result = array_intersect_key($data, array_flip($acceptFilters));
|
||||
|
||||
return new self($result);
|
||||
}
|
||||
}
|
||||
34
app/UI/DTO/OrderDTO.php
Normal file
34
app/UI/DTO/OrderDTO.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\UI\DTO;
|
||||
|
||||
class OrderDTO
|
||||
{
|
||||
public function __construct(public readonly string $column, public readonly OrderDirection $direction)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int, string> $acceptColumns
|
||||
*/
|
||||
public static function createOrReturnNullFromData(?string $order, ?string $direction, array $acceptColumns = []): ?OrderDTO
|
||||
{
|
||||
if ($order === null || $direction === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!in_array($order, $acceptColumns, true)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$direction = OrderDirection::tryFrom($direction);
|
||||
|
||||
if ($direction === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new self($order, $direction);
|
||||
}
|
||||
}
|
||||
11
app/UI/DTO/OrderDirection.php
Normal file
11
app/UI/DTO/OrderDirection.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\UI\DTO;
|
||||
|
||||
enum OrderDirection: string
|
||||
{
|
||||
case ASC = "ASC";
|
||||
case DESC = "DESC";
|
||||
}
|
||||
Reference in New Issue
Block a user