From 761d6973637b3c694663c8bc94f1f25356dcdc3d Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 2 Jun 2021 18:56:50 +0200 Subject: [PATCH] backports murph-skeleton --- core/Crud/Field/Field.php | 4 ++++ core/Twig/Extension/CrudExtension.php | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/Crud/Field/Field.php b/core/Crud/Field/Field.php index db5410c..e897716 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']); + $resolver->setAllowedTypes('href_attr', 'array'); $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..a2e153d 100644 --- a/core/Twig/Extension/CrudExtension.php +++ b/core/Twig/Extension/CrudExtension.php @@ -39,6 +39,19 @@ 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'])) { + $config['options']['href_attr'] = $config['options']['href_attr'] ?? []; + $attributes = ''; + + foreach ($config['options']['href_attr'] as $k => $v) { + $attributes .= sprintf('%s="%s" ', htmlspecialchars($k), htmlspecialchars($v)); + } + + $render = sprintf('%s', htmlspecialchars($config['options']['href']), $attributes, $render); + } + + return $render; } }