You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 line
1.7KB

  1. <?php
  2. namespace Lc\SovBundle\Field;
  3. use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
  4. use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait;
  5. use Lc\SovBundle\Form\Type\FileManagerType;
  6. use Symfony\Component\Form\Extension\Core\Type\TextType;
  7. /**
  8. * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  9. */
  10. final class FileManagerField implements FieldInterface
  11. {
  12. use FieldTrait;
  13. public const OPTION_MAX_LENGTH = 'maxLength';
  14. public const OPTION_RENDER_AS_HTML = 'renderAsHtml';
  15. public static function new(string $propertyName, ?string $label = null): self
  16. {
  17. return (new self())
  18. ->setProperty($propertyName)
  19. ->setLabel($label)
  20. ->setTemplatePath('@LcSov/crud/field/image.html.twig')
  21. ->addJsFiles('bundles/lcadmin/js/form-type-file-manager.js')
  22. ->setFormType(FileManagerType::class)
  23. ->addCssClass('field-text')
  24. ->setCustomOption(self::OPTION_MAX_LENGTH, null)
  25. ->setCustomOption(self::OPTION_RENDER_AS_HTML, false);
  26. }
  27. public function setMaxLength(int $length): self
  28. {
  29. if ($length < 1) {
  30. throw new \InvalidArgumentException(sprintf('The argument of the "%s()" method must be 1 or higher (%d given).', __METHOD__, $length));
  31. }
  32. $this->setCustomOption(self::OPTION_MAX_LENGTH, $length);
  33. return $this;
  34. }
  35. public function renderAsHtml(bool $asHtml = true): self
  36. {
  37. $this->setCustomOption(self::OPTION_RENDER_AS_HTML, $asHtml);
  38. return $this;
  39. }
  40. }