add href and href_attr in Field
This commit is contained in:
parent
4ea6eceb0d
commit
0fe6b4f3ed
|
@ -31,6 +31,8 @@ abstract class Field
|
||||||
'view' => null,
|
'view' => null,
|
||||||
'raw' => false,
|
'raw' => false,
|
||||||
'sort' => null,
|
'sort' => null,
|
||||||
|
'href' => null,
|
||||||
|
'href_attr' => [],
|
||||||
'attr' => [],
|
'attr' => [],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -38,6 +40,8 @@ abstract class Field
|
||||||
$resolver->setAllowedTypes('property', ['null', 'string']);
|
$resolver->setAllowedTypes('property', ['null', 'string']);
|
||||||
$resolver->setAllowedTypes('view', 'string');
|
$resolver->setAllowedTypes('view', 'string');
|
||||||
$resolver->setAllowedTypes('attr', 'array');
|
$resolver->setAllowedTypes('attr', 'array');
|
||||||
|
$resolver->setAllowedTypes('href', ['null', 'string', 'callable']);
|
||||||
|
$resolver->setAllowedTypes('href_attr', 'array', 'callable');
|
||||||
$resolver->setAllowedTypes('raw', 'boolean');
|
$resolver->setAllowedTypes('raw', 'boolean');
|
||||||
$resolver->setAllowedTypes('property_builder', ['null', 'callable']);
|
$resolver->setAllowedTypes('property_builder', ['null', 'callable']);
|
||||||
$resolver->setAllowedValues('sort', function($value) {
|
$resolver->setAllowedValues('sort', function($value) {
|
||||||
|
|
|
@ -39,6 +39,32 @@ class CrudExtension extends AbstractExtension
|
||||||
$instance = new $field();
|
$instance = new $field();
|
||||||
$resolver = $instance->configureOptions(new OptionsResolver());
|
$resolver = $instance->configureOptions(new OptionsResolver());
|
||||||
|
|
||||||
return $instance->buildView($this->twig, $entity, $resolver->resolve($config['options']), $locale);
|
$render = $instance->buildView($this->twig, $entity, $resolver->resolve($config['options']), $locale);
|
||||||
|
|
||||||
|
if (isset($config['options']['href'])) {
|
||||||
|
$hrefAttrConfig = $config['options']['href_attr'] ?? [];
|
||||||
|
$hrefConfig = $config['options']['href'] ?? null;
|
||||||
|
$attributes = '';
|
||||||
|
|
||||||
|
if (is_callable($hrefAttrConfig)) {
|
||||||
|
$attrs = (array) call_user_func($hrefAttrConfig, $entity, $config['options']);
|
||||||
|
} else {
|
||||||
|
$attrs = $hrefAttrConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_callable($hrefConfig)) {
|
||||||
|
$href = call_user_func($hrefConfig, $entity, $config['options']);
|
||||||
|
} else {
|
||||||
|
$href = $hrefConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($attrs as $k => $v) {
|
||||||
|
$attributes .= sprintf('%s="%s" ', htmlspecialchars($k), htmlspecialchars($v));
|
||||||
|
}
|
||||||
|
|
||||||
|
$render = sprintf('<a href="%s" %s>%s</a>', htmlspecialchars($href), $attributes, $render);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $render;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue