makeplus / sftinymce
Bundle Symfony 7.4 para integrar TinyMCE con gestor de archivos y AssetMapper.
Package info
Type:symfony-bundle
pkg:composer/makeplus/sftinymce
Requires
- php: ^8.2
- doctrine/dbal: ^4.4
- symfony/asset-mapper: ^7.4
- symfony/form: ^7.4
- symfony/framework-bundle: ^7.4
- symfony/options-resolver: ^7.4
- symfony/security-core: ^7.4
- tinymce/tinymce: ^8
- twig/twig: ^3.0
Requires (Dev)
- phpunit/phpunit: ^10.5
- symfony/phpunit-bridge: ^7.4
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
Instalar dependencias PHP:
composer installCompilar el asset map cuando sea necesario:
bin/console asset-map:compileLimpieza 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 onullcon 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 enfile_manager.managersque 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 onullpara 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 declarefile_manager.file_manager.managers.<alias>.storage: adaptador configurado enstorage.adaptersque 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 implementaFileStorageInterface.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_pathypublic_prefixconfigurables). La tabla se crea automáticamente si no existe y las consultaslist/searchdevuelven 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-configdel 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_enabledes verdadero, el bundle añade automáticamente el selector de archivos y el handler de subidas: bastará con definir los roles necesarios (víasecurity_rolesdel 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/tinymcerenderizaDemoSimpleArticleTypecon TinyMCE y muestra una vista previa HTML tras el envío. - Ruta adicional:
/demo/tinymce_files_pathutilizaDemoFilePathArticleType, habilita el gestor de archivos y conserva la vista previa con el mismo template. - Los controladores
App\Controller\DemoSimpleControlleryApp\Controller\DemoFilesPathControllerjunto al DTOApp\Dto\DemoArticlepermiten probar la integración sin persistencia. - La plantilla
templates/demo/tinymce.html.twigse 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.yamly 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 confile_manager.base_route_prefixy el navegador HTML se sirve en la ruta/browser. - Se valida tamaño y tipo de archivo según
file_manager.upload, ydefault_pathfija el directorio inicial que abre el navegador. - Roles admitidos: se pueden enviar como
roles[]=ROLE_EDITORen la query (o enviarse automáticamente desde el campo) o reutilizar los roles globales configurados. - Al marcar
file_manager_enabled, el bundle añadefile_picker_callbackeimages_upload_handlerpor 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
paginationcon metadatos (page,per_page,pages,total). - Las anulaciones declaradas en
file_manager_overridespermiten 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/tinymceal AssetMapper, exponiéndolo bajo el namespacemakeplus/tinymce. - Para consumirlo desde Twig o JS, referenciar las rutas generadas por AssetMapper (
@makeplus/tinymce, etc.). - El bundle decora el
MappedAssetFactorypara 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/phpunitSe incluye un test unitario para
TinyMceTypeque valida la fusión de perfiles y opciones.Estructura Cypress inicial disponible en
tests/cypress/(añadir pruebas end-to-end y configurarpackage.jsonsegún necesidades del proyecto consumidor).