{{ tinymce() }} → @tinymce()), but requires manual adaptation (e.g., asset paths, form handling).FormRequest, Fillable models).config/tinymce.yaml) and per-instance overrides (via form options or Twig attributes). This maps well to Laravel’s service container and config caching patterns.public_path() must replace Symfony’s asset().FormRequest or Request objects can replace Symfony’s FormBuilderInterface. Example:
use Eckinox\TinyMceBundle\Form\Type\TinymceType; // Alias or fork for Laravel
$builder->add('content', TinymceType::class, ['attr' => ['toolbar' => 'bold']]);
TinyMceUploadController is Symfony-centric but can be adapted to Laravel’s UploadedFile handling and route system.tinymce() function, but a custom Blade directive can replicate it:
Blade::directive('tinymce', function ($content) {
return "<?php echo \Eckinox\TinyMceBundle\Twig\TinymceExtension::renderTinymce($content); ?>";
});
FormRequest and Blade are not drop-in replacements, requiring:
AbstractType to bridge Laravel’s FormBuilder with Symfony’s TinymceType.public/bundles/tinymce (via php artisan vendor:publish or manual copy).@vite(['resources/bundles/tinymce/tinymce.min.js'])).UploadedFile and routing. Laravel’s StoreRequest or UploadedFile handling requires rewriting the endpoint logic (e.g., CORS headers, file validation).composer.json:
"require": {
"eckinox/tinymce-bundle": "^1.1",
"tinymce/tinymce": "^6.8"
}
content column)?FormBuilderInterface with Laravel’s FormBuilder?spatie/tinymce-laravel) that reduces risk?FormBuilderInterface with Laravel’s FormRequest handling.tinymce() via custom Blade syntax.config() system.public/bundles/tinymce and import via @vite.Observers or Accessors to sanitize TinyMCE HTML before saving (e.g., strip scripts).spatie/laravel-medialibrary for image uploads.replace in composer.json).AbstractType:
namespace App\Form\Type;
use Eckinox\TinyMceBundle\Form\Type\TinymceType as SymfonyTinymceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class TinymceType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->addViewTransformer(new TinyMceTransformer());
}
}
asset() with Laravel’s asset() in asset paths.UploadedFile and a dedicated controller:
public function upload(Request $request) {
$file = $request->file('file');
$path = $file->store('tinymce', 'public');
return response()->json(['location' => asset("storage/$path")]);
}
config/tinymce.php (mapped to Laravel’s config('tinymce')).| Laravel Feature | Compatibility | Workaround |
|---|---|---|
| Blade Templating | ❌ No Twig functions | Custom Blade directive or View Composer. |
| Eloquent Models | ⚠️ Manual binding required | Use Observers or Accessors for HTML sanitization. |
| Form Requests | ⚠️ Symfony FormBuilderInterface mismatch |
Extend AbstractType or use a facade layer. |
| Vite/Laravel Mix | ✅ Works with published assets | Configure Vite to handle bundles/tinymce paths. |
| Livewire/Inertia.js | ✅ Web Component plays well with these frameworks | Pass dynamic configs via props/attributes. |
| File Uploads | ⚠️ Symfony controller logic | Rewrite using Laravel’s UploadedFile and Storage facade. |
| Caching | ✅ Config caching works | Use Laravel’s config() system. |
How can I help you explore Laravel packages today?