makeplus/sftinymce

Bundle Symfony 7.4 para integrar TinyMCE con gestor de archivos y AssetMapper.

Maintainers

Package info

gitlab.com/makeplus/sftinymce

Issues

Type:symfony-bundle

pkg:composer/makeplus/sftinymce

Statistics

Installs: 6

Dependents: 0

Suggesters: 0

Stars: 0

0.1.3.4 2026-01-14 04:40 UTC

This package is not auto-updated.

Last update: 2026-03-25 08:26:16 UTC


README

Bundle Symfony 7.4 para integrar TinyMCE como tipo de formulario, con soporte AssetMapper por defecto y adaptadores opcionales previstos para Webpack Encore, Symfony UX / Stimulus y WebLink.

Requisitos

  • PHP 8.2 o superior
  • Symfony 7.4
  • Composer

Dependencias principales ya incluidas: TinyMCE (vía tinymce/tinymce), Doctrine ORM 3.6, componentes Form, Twig, Translation, Security y AssetMapper.

Instalación

  1. Instalar dependencias PHP:

     composer install
    
  2. Compilar el asset map cuando sea necesario:

     bin/console asset-map:compile
    
  3. Limpieza de caché recomendada tras cambios en la configuración del bundle:

     bin/console cache:clear
    

Configuración del bundle

Las opciones de config/packages/makeplus_tinymce.yaml permiten ajustar el comportamiento del bundle:

makeplus_tinymce:
	default_profile: default
	profiles:
		default:
			toolbar: null
			plugins: []
			file_manager_enabled: false
			language: null
			options: []
		file_manager:
			toolbar: "undo redo | styles | bold italic underline | alignleft aligncenter alignright | link image media | code"
			plugins: ['link', 'image', 'media', 'code']
			file_manager_enabled: true
			file_manager: documents
			file_manager_overrides:
				image: media_library
			language: null
			security_roles: []
			options:
				height: 420
				file_picker_types: 'file image media'
				file_manager_path: 'articles'
	file_manager:
		enabled: true
		base_route_prefix: "/makeplus/tinymce/file-manager"
		default_template: "@MakeplusTinyMce/file_manager/browser.html.twig"
		default_manager: media_library
		managers:
			media_library:
				storage: media_storage
				route_segment: media
				default_path: "articles"
				template: "@MakeplusTinyMce/file_manager/browser.html.twig"
				upload:
					allowed_mime_types: ['image/png', 'image/jpeg', 'image/gif']
					max_file_size: 5242880
			documents:
				storage: documents_storage
				route_segment: documents
				default_path: "docs"
				template: "@App/documents/file_manager.html.twig"
				upload:
					allowed_mime_types: ['application/pdf']
					max_file_size: 10485760
	storage:
		default_adapter: media_storage
		adapters:
			media_storage:
				service: Makeplus\TinyMceBundle\Service\FileStorage\LocalStorageService
				options:
					relative_path: "public/uploads/tinymce_media"
					public_prefix: "/uploads/tinymce_media"
			documents_storage:
				service: Makeplus\TinyMceBundle\Service\FileStorage\DatabaseStorageService
				options:
					relative_path: "public/uploads/tinymce_documents"
					public_prefix: "/uploads/tinymce_documents"
					table_name: "makeplus_tinymce_documents"
  • default_profile: nombre del perfil aplicado cuando el formulario no especifica otro.
  • profiles.<nombre>.toolbar: cadena o null con la barra de herramientas de TinyMCE.
  • profiles.<nombre>.plugins: lista de plugins a cargar.
  • profiles.<nombre>.file_manager_enabled: habilita el file manager para el perfil.
  • profiles.<nombre>.file_manager: alias del gestor configurado en file_manager.managers que se usará por defecto.
  • profiles.<nombre>.file_manager_overrides.<tipo>: permite asignar gestores distintos según el tipo solicitado por TinyMCE (file, image, media).
  • profiles.<nombre>.language: código de idioma TinyMCE o null para heredar el locale de Symfony.
  • profiles.<nombre>.options: arreglo asociativo de opciones adicionales que se fusionan con la configuración base del tipo de formulario.
  • file_manager.enabled: activa o desactiva el gestor de archivos globalmente.
  • file_manager.base_route_prefix: prefijo común para las rutas generadas por el controlador del gestor.
  • file_manager.default_template: ruta de la plantilla Twig utilizada cuando un gestor no define una propia.
  • file_manager.default_manager: alias del gestor a utilizar cuando un perfil no declare file_manager.
  • file_manager.managers.<alias>.storage: adaptador configurado en storage.adapters que manejará los archivos del gestor.
  • file_manager.managers.<alias>.route_segment: segmento de ruta que se añade al prefijo para diferenciar cada gestor.
  • file_manager.managers.<alias>.default_path: carpeta inicial que abrirá el navegador de archivos.
  • file_manager.managers.<alias>.template: plantilla Twig específica para renderizar la interfaz del gestor.
  • file_manager.managers.<alias>.security.roles: lista de roles Symfony requeridos para acceder a este gestor.
  • file_manager.managers.<alias>.upload.allowed_mime_types: lista de tipos MIME aceptados en las subidas.
  • file_manager.managers.<alias>.upload.max_file_size: tamaño máximo de archivo en bytes.
  • storage.default_adapter: adaptador utilizado cuando un gestor no especifica otro o para operaciones por defecto.
  • storage.adapters.<nombre>.service: identificador de servicio (o clase) que implementa FileStorageInterface.
  • storage.adapters.<nombre>.options.relative_path: ruta interna donde se almacenarán los archivos del adaptador.
  • storage.adapters.<nombre>.options.public_prefix: prefijo público usado para exponer los archivos mediante AssetMapper o servidor web.
  • storage.adapters.<nombre>.options.table_name: (opcional) nombre de tabla cuando se usa el almacenamiento basado en base de datos.

Adaptadores de almacenamiento

  • Makeplus\TinyMceBundle\Service\FileStorage\LocalStorageService: almacenamiento en disco sin estado adicional. Soporta paginación básica y búsquedas sobre los nombres de archivo.
  • Makeplus\TinyMceBundle\Service\FileStorage\DatabaseStorageService: combina almacenamiento en disco con persistencia de metadatos vía Doctrine DBAL (table_name, relative_path y public_prefix configurables). La tabla se crea automáticamente si no existe y las consultas list/search devuelven metadatos paginados.

Uso del formulario

use Makeplus\TinyMceBundle\Form\Type\TinyMceType;

$builder->add('content', TinyMceType::class, [
		'profile' => 'default',
		'security_roles' => ['ROLE_EDITOR'],
		'options' => [
				'height' => 500,
				'branding' => false,
		],
]);
  • El atributo data-makeplus-tinymce-config del campo contiene la configuración resolviendo perfil, plugins, toolbar, idioma, roles y opciones adicionales listo para el controlador front-end (Stimulus/UX previsto).
  • Si file_manager_enabled es verdadero, el bundle añade automáticamente el selector de archivos y el handler de subidas: bastará con definir los roles necesarios (vía security_roles del formulario o los roles globales configurados) para que TinyMCE abra el gestor integrado.
  • El bundle detecta automáticamente la presencia del tipo y añade los scripts y estilos de TinyMCE antes de cerrar el <body>, sin necesidad de bloques Twig adicionales.

Demo incluida

  • Ruta disponible: /demo/tinymce renderiza DemoSimpleArticleType con TinyMCE y muestra una vista previa HTML tras el envío.
  • Ruta adicional: /demo/tinymce_files_path utiliza DemoFilePathArticleType, habilita el gestor de archivos y conserva la vista previa con el mismo template.
  • Los controladores App\Controller\DemoSimpleController y App\Controller\DemoFilesPathController junto al DTO App\Dto\DemoArticle permiten probar la integración sin persistencia.
  • La plantilla templates/demo/tinymce.html.twig se limita a renderizar el formulario; el bundle inyecta los assets de TinyMCE automáticamente mediante AssetMapper preservando la estructura original.
  • Ajustá perfiles y opciones en config/packages/makeplus_tinymce.yaml y recargá la ruta para verificar los cambios de toolbar, plugins o idioma.

Gestor de archivos

  • El bundle registra rutas bajo config/routes/makeplus_tinymce.yaml; el prefijo se controla con file_manager.base_route_prefix y el navegador HTML se sirve en la ruta /browser.
  • Se valida tamaño y tipo de archivo según file_manager.upload, y default_path fija el directorio inicial que abre el navegador.
  • Roles admitidos: se pueden enviar como roles[]=ROLE_EDITOR en la query (o enviarse automáticamente desde el campo) o reutilizar los roles globales configurados.
  • Al marcar file_manager_enabled, el bundle añade file_picker_callback e images_upload_handler por defecto: se abre una ventana dedicada para seleccionar archivos y las subidas usan el adaptador configurado.
  • La ventana del gestor ahora permite buscar por texto en el árbol y navegar entre resultados paginados; los endpoints REST devuelven la clave pagination con metadatos (page, per_page, pages, total).
  • Las anulaciones declaradas en file_manager_overrides permiten que acciones concretas (ej. insertar enlaces vs. imágenes) se resuelvan contra gestores distintos sin duplicar perfiles.

Assets TinyMCE

  • La extensión del bundle añade automáticamente vendor/tinymce/tinymce al AssetMapper, exponiéndolo bajo el namespace makeplus/tinymce.
  • Para consumirlo desde Twig o JS, referenciar las rutas generadas por AssetMapper (@makeplus/tinymce, etc.).
  • El bundle decora el MappedAssetFactory para publicar los archivos de TinyMCE sin digest, conservando la estructura de carpetas esperada por el cargador interno de TinyMCE.
  • Un suscriptor HTTP detecta la presencia de campos TinyMCE y emite el paquete de scripts y estilos justo antes de </body>, garantizando la carga automática.
  • Se provee la función Twig makeplus_tinymce_package_path() para obtener la ruta absoluta del paquete cuando se requiera servir assets directamente.

Pruebas

  • Ejecutar la suite PHPUnit:

    ./vendor/bin/phpunit
    

    Se incluye un test unitario para TinyMceType que valida la fusión de perfiles y opciones.

  • Estructura Cypress inicial disponible en tests/cypress/ (añadir pruebas end-to-end y configurar package.json según necesidades del proyecto consumidor).