From 0fe6b4f3ed1e8bdd5e2d48aaa16317efd5ae67c7 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 2 Jun 2021 19:09:27 +0200 Subject: [PATCH] add href and href_attr in Field --- core/Crud/Field/Field.php | 4 ++++ core/Twig/Extension/CrudExtension.php | 28 ++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/core/Crud/Field/Field.php b/core/Crud/Field/Field.php index db5410c..42256e8 100644 --- a/core/Crud/Field/Field.php +++ b/core/Crud/Field/Field.php @@ -31,6 +31,8 @@ abstract class Field 'view' => null, 'raw' => false, 'sort' => null, + 'href' => null, + 'href_attr' => [], 'attr' => [], ]); @@ -38,6 +40,8 @@ abstract class Field $resolver->setAllowedTypes('property', ['null', 'string']); $resolver->setAllowedTypes('view', 'string'); $resolver->setAllowedTypes('attr', 'array'); + $resolver->setAllowedTypes('href', ['null', 'string', 'callable']); + $resolver->setAllowedTypes('href_attr', 'array', 'callable'); $resolver->setAllowedTypes('raw', 'boolean'); $resolver->setAllowedTypes('property_builder', ['null', 'callable']); $resolver->setAllowedValues('sort', function($value) { diff --git a/core/Twig/Extension/CrudExtension.php b/core/Twig/Extension/CrudExtension.php index fc34ecb..8539800 100644 --- a/core/Twig/Extension/CrudExtension.php +++ b/core/Twig/Extension/CrudExtension.php @@ -39,6 +39,32 @@ class CrudExtension extends AbstractExtension $instance = new $field(); $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('%s', htmlspecialchars($href), $attributes, $render); + } + + return $render; } }