protected function parseConfig(array $config) { if (!isset($config['converters'])) { $config['converters'] = []; } if (!isset($config['filters'])) { $config['filters'] = []; } // Parse converter definitions and create objects foreach ($config['converters'] as $columnName => $converters) { foreach ($converters as $converterDef) { $this->convertersDefinitions[$columnName][] = ConverterDefinition::factory($converterDef); } } // Parse filter configurations and create filter objects foreach ($config['filters'] as $filter) { $operator = $filter[0]; $columnName = $filter[1]; $value = $filter[2]; if ($operator == 'depends') { $referencedColumn = explode('.', $value); if (count($referencedColumn) !== 2) { throw new \InvalidArgumentException('Unexpected format for depends operator "' . $value . '". Expected format "table.column"'); } $referencedTable = $referencedColumn[0]; $referencedColumn = $referencedColumn[1]; $this->dependentTables[] = $referencedTable; $this->filters[] = new DataDependentFilter($columnName, $referencedTable, $referencedColumn); } else { $this->filters[] = new DefaultFilter($columnName, $operator, $value); } } }
/** * @param array $converterDefinitions * * @return ChainConverter */ private function createConditionalConverter($converterDefinitions) { $converters = []; foreach ($converterDefinitions as $definition) { $converterDefinition = ConverterDefinition::factory($definition); $converters[] = DataConverter::createConverterInstance($converterDefinition); } if (count($converters) > 1) { $converter = new ChainConverter($converters); } else { $converter = $converters[0]; } return $converter; }