GridViewConfig
in package
Configuration validator and normalizer for grid views.
Provides validation, normalization, and utility methods for grid view configs. Supports both flat filters (legacy AND conditions) and nested expression trees (OR/AND combinations).
Tags
Table of Contents
Constants
- DEFAULT_PAGE_SIZE = 25
- Default page size
- MAX_PAGE_SIZE = 100
- Maximum page size
- MIN_PAGE_SIZE = 10
- Minimum page size
- VALID_DIRECTIONS = ['asc', 'desc']
- Valid sort directions
- VALID_OPERATORS = ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'startsWith', 'endsWith', 'in', 'notIn', 'isNull', 'isNotNull', 'dateRange']
- Valid filter operators
Methods
- createDefault() : array<string, mixed>
- Create a default config from column metadata
- extractColumnConfiguration() : array<string, array{visible: bool, order: int}>
- Extract all columns from config with their order and visibility
- extractExpression() : QueryExpression|null
- Extract nested OR/AND expression tree from config
- extractFilters() : array<string, mixed>
- Extract ORM-compatible filter conditions from config
- extractPageSize() : int
- Extract page size from config
- extractSort() : array<string, string>
- Extract sort order from config
- extractVisibleColumns() : array<string|int, string>
- Extract visible columns from config in display order
- normalize() : array<string, mixed>
- Normalize a config array to ensure consistent structure
- validate() : array<string|int, string>
- Validate a config array
- buildExpression() : QueryExpression
- Recursively build QueryExpression from expression tree
- buildLeafCondition() : array<string, mixed>
- Build CakePHP condition array from a leaf condition
- isValidFilter() : bool
- Check if a filter definition is valid
- isValidSort() : bool
- Check if a sort definition is valid
Constants
DEFAULT_PAGE_SIZE
Default page size
public
mixed
DEFAULT_PAGE_SIZE
= 25
MAX_PAGE_SIZE
Maximum page size
public
mixed
MAX_PAGE_SIZE
= 100
MIN_PAGE_SIZE
Minimum page size
public
mixed
MIN_PAGE_SIZE
= 10
VALID_DIRECTIONS
Valid sort directions
public
mixed
VALID_DIRECTIONS
= ['asc', 'desc']
VALID_OPERATORS
Valid filter operators
public
mixed
VALID_OPERATORS
= ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'startsWith', 'endsWith', 'in', 'notIn', 'isNull', 'isNotNull', 'dateRange']
Methods
createDefault()
Create a default config from column metadata
public
static createDefault(array<string, array<string, mixed>> $columnMetadata) : array<string, mixed>
Parameters
- $columnMetadata : array<string, array<string, mixed>>
-
Column definitions
Return values
array<string, mixed> —Default config
extractColumnConfiguration()
Extract all columns from config with their order and visibility
public
static extractColumnConfiguration(array<string, mixed> $config) : array<string, array{visible: bool, order: int}>
Parameters
- $config : array<string, mixed>
-
Grid view config
Return values
array<string, array{visible: bool, order: int}> —Column configuration map
extractExpression()
Extract nested OR/AND expression tree from config
public
static extractExpression(array<string, mixed> $config, QueryExpression $queryExpression[, string $tableName = '' ][, array<string|int, string> $skipColumns = [] ][, array<string, array<string, mixed>> $columnsMetadata = [] ]) : QueryExpression|null
Builds a CakePHP QueryExpression from a nested expression tree. Supports:
- Simple field conditions: {"field": "status", "operator": "eq", "value": "active"}
- OR groups: {"type": "OR", "conditions": [...]}
- AND groups: {"type": "AND", "conditions": [...]}
- Nested combinations: Mix OR/AND at any depth
Expression format:
{
"type": "OR|AND",
"conditions": [
{"field": "status", "operator": "eq", "value": "active"},
{
"type": "AND",
"conditions": [...]
}
]
}
Parameters
- $config : array<string, mixed>
-
Grid view config
- $queryExpression : QueryExpression
-
Base expression object from query
- $tableName : string = ''
-
Table name for field qualification (e.g., 'Warrants')
- $skipColumns : array<string|int, string> = []
-
Column keys to skip (for custom-filtered columns)
- $columnsMetadata : array<string, array<string, mixed>> = []
-
Column metadata for queryField lookups
Return values
QueryExpression|null —Built expression tree or null if no expression
extractFilters()
Extract ORM-compatible filter conditions from config
public
static extractFilters(array<string, mixed> $config) : array<string, mixed>
Parameters
- $config : array<string, mixed>
-
Grid view config
Return values
array<string, mixed> —ORM conditions
extractPageSize()
Extract page size from config
public
static extractPageSize(array<string, mixed> $config) : int
Parameters
- $config : array<string, mixed>
-
Grid view config
Return values
int —Page size
extractSort()
Extract sort order from config
public
static extractSort(array<string, mixed> $config) : array<string, string>
Parameters
- $config : array<string, mixed>
-
Grid view config
Return values
array<string, string> —Sort order for ORM
extractVisibleColumns()
Extract visible columns from config in display order
public
static extractVisibleColumns(array<string, mixed> $config[, array<string, array<string, mixed>> $availableColumns = [] ]) : array<string|int, string>
Parameters
- $config : array<string, mixed>
-
Grid view config
- $availableColumns : array<string, array<string, mixed>> = []
-
Available column metadata
Return values
array<string|int, string> —Array of visible column keys in order
normalize()
Normalize a config array to ensure consistent structure
public
static normalize(array<string, mixed> $config[, array<string, array<string, mixed>> $availableColumns = [] ]) : array<string, mixed>
Parameters
- $config : array<string, mixed>
-
Raw config array
- $availableColumns : array<string, array<string, mixed>> = []
-
Available column metadata
Return values
array<string, mixed> —Normalized config
validate()
Validate a config array
public
static validate(array<string, mixed> $config[, array<string, array<string, mixed>> $availableColumns = [] ]) : array<string|int, string>
Parameters
- $config : array<string, mixed>
-
Config to validate
- $availableColumns : array<string, array<string, mixed>> = []
-
Available column metadata
Return values
array<string|int, string> —Array of error messages (empty if valid)
buildExpression()
Recursively build QueryExpression from expression tree
protected
static buildExpression(array<string, mixed> $expression, QueryExpression $queryExpression, string $tableName[, array<string|int, string> $skipColumns = [] ][, array<string, array<string, mixed>> $columnsMetadata = [] ]) : QueryExpression
Parameters
- $expression : array<string, mixed>
-
Expression node (group or condition)
- $queryExpression : QueryExpression
-
Base expression from query
- $tableName : string
-
Table name for field qualification
- $skipColumns : array<string|int, string> = []
-
Column keys to skip (for custom-filtered columns)
- $columnsMetadata : array<string, array<string, mixed>> = []
-
Column metadata for queryField lookups
Return values
QueryExpression —Built expression
buildLeafCondition()
Build CakePHP condition array from a leaf condition
protected
static buildLeafCondition(array<string, mixed> $condition, string $tableName[, array<string|int, string> $skipColumns = [] ][, array<string, array<string, mixed>> $columnsMetadata = [] ]) : array<string, mixed>
Converts expression condition format to CakePHP ORM condition format:
- {"field": "status", "operator": "eq", "value": "active"}
- Becomes: ["Table.status" => "active"]
Uses queryField from column metadata when available to correctly qualify fields that map to different table columns (e.g., branch_type -> AwardBranch.type).
Parameters
- $condition : array<string, mixed>
-
Condition definition
- $tableName : string
-
Table name for field qualification
- $skipColumns : array<string|int, string> = []
-
Column keys to skip (for custom-filtered columns)
- $columnsMetadata : array<string, array<string, mixed>> = []
-
Column metadata for queryField lookups
Return values
array<string, mixed> —CakePHP condition array
isValidFilter()
Check if a filter definition is valid
protected
static isValidFilter(mixed $filter, array<string, array<string, mixed>> $availableColumns) : bool
Parameters
- $filter : mixed
-
Filter definition
- $availableColumns : array<string, array<string, mixed>>
-
Available columns
Return values
boolisValidSort()
Check if a sort definition is valid
protected
static isValidSort(mixed $sort, array<string, array<string, mixed>> $availableColumns) : bool
Parameters
- $sort : mixed
-
Sort definition
- $availableColumns : array<string, array<string, mixed>>
-
Available columns