/** * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column * @throws \InvalidArgumentException */ private function validateOptions(ColumnTypeInterface $column) { $actions = $column->getOption('actions'); if (!is_array($actions)) { throw new \InvalidArgumentException('Option "actions" must be an array.'); } if (!count($actions)) { throw new \InvalidArgumentException('Option actions can\'t be empty.'); } foreach ($actions as $actionName => &$options) { if (!is_array($options)) { throw new \InvalidArgumentException(sprintf('Options for action "%s" must be an array.', $actionName)); } foreach ($options as $optionName => $value) { if (!in_array($optionName, $this->actionOptionsAvailable)) { throw new \InvalidArgumentException(sprintf('Unknown option "%s" in action "%s".', $optionName, $actionName)); } } foreach ($this->actionOptionsRequired as $optionName) { if (!array_key_exists($optionName, $options)) { throw new \InvalidArgumentException(sprintf('Action "%s" require option "%s".', $actionName, $optionName)); } } foreach ($this->actionOptionsDefault as $optionName => $value) { if (!array_key_exists($optionName, $options)) { $options[$optionName] = $value; } } if (isset($options['parameters_values'])) { if (!is_array($options['parameters_values'])) { throw new \InvalidArgumentException(sprintf('Action "%s" require option "parameters_values" as array.', $actionName, $optionName)); } } if (isset($options['parameters'])) { if (!is_array($options['parameters'])) { throw new \InvalidArgumentException(sprintf('Action "%s" require option "parameters" as array.', $actionName, $optionName)); } $mappingFields = $column->getOption('field_mapping'); foreach ($options['parameters'] as $mappingField => $routerParameter) { if (!in_array($mappingField, $mappingFields, true)) { throw new \InvalidArgumentException(sprintf('Unknown mapping_field "%s". Maybe you should consider using option "parameters_values"?', $mappingField)); } } } } $column->setOption('actions', $actions); }