murph-skeleton/core/Twig/Extension/CrudExtension.php

45 lines
1.2 KiB
PHP
Raw Normal View History

2021-05-12 10:18:34 +02:00
<?php
namespace App\Core\Twig\Extension;
2021-05-12 11:56:48 +02:00
use Symfony\Component\OptionsResolver\OptionsResolver;
2021-05-12 10:18:34 +02:00
use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\PropertyAccess\PropertyAccessor;
use Twig\Environment;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class CrudExtension extends AbstractExtension
{
protected PropertyAccessor $propertyAccessor;
protected Environment $twig;
public function __construct(Environment $twig)
{
$this->propertyAccessor = PropertyAccess::createPropertyAccessorBuilder()
->getPropertyAccessor()
;
$this->twig = $twig;
}
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return [
new TwigFunction('render_field', [$this, 'renderField'], ['is_safe' => ['html']]),
];
}
2021-05-13 17:49:19 +02:00
public function renderField($entity, array $config, ?string $locale = null): string
2021-05-12 10:18:34 +02:00
{
$field = $config['field'];
2021-05-12 11:56:48 +02:00
$instance = new $field();
2021-05-12 10:18:34 +02:00
$resolver = $instance->configureOptions(new OptionsResolver());
2021-05-13 17:49:19 +02:00
return $instance->buildView($this->twig, $entity, $resolver->resolve($config['options']), $locale);
2021-05-12 10:18:34 +02:00
}
}