Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ckfinder Symfony3 Bundle Laravel Package

ckfinder/ckfinder-symfony3-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require ckfinder/ckfinder-symfony3-bundle
    

    Add the bundle to app/AppKernel.php:

    new CKSource\CKFinderBundle\CKFinderBundle(),
    
  2. Configuration Update app/config/config.yml:

    ckfinder:
        license_key: "YOUR_LICENSE_KEY"  # Required for production
        upload_url: "%kernel.root_dir%/../web/uploads"  # Default upload directory
        access_control:
            user_files: ~  # Allow users to access their own files
        integrations:
            symfony_assets: ~  # Enable Symfony asset integration
    
  3. First Use Case: File Upload Inject the CKFinder service in a controller:

    use CKSource\CKFinderBundle\CKFinder\CKFinderInterface;
    
    class MyController extends Controller
    {
        public function uploadAction(CKFinderInterface $ckfinder)
        {
            // Handle uploads via CKFinder's built-in routes
            return $this->render('my_template.html.twig');
        }
    }
    

    Use the default CKFinder route (/ckfinder/core/connector) in your Twig template:

    <input type="text" name="file-upload" data-ckfinder="true">
    

Implementation Patterns

Workflow: Asset Management

  1. Twig Integration Use ckfinder_asset Twig function to generate URLs:

    {{ ckfinder_asset('images/logo.png') }}
    

    Configure in config.yml:

    ckfinder:
        integrations:
            twig: ~
    
  2. Custom Upload Handlers Extend the default upload logic by creating a custom UploadAdapter:

    namespace App\CKFinder;
    
    use CKSource\CKFinderBundle\CKFinder\Adapter\UploadAdapterInterface;
    
    class CustomUploadAdapter implements UploadAdapterInterface
    {
        public function upload($file, $destination)
        {
            // Custom logic (e.g., rename files, validate extensions)
            return $destination . '/custom_' . $file->getClientOriginalName();
        }
    }
    

    Register in services.yml:

    services:
        app.ckfinder.upload_adapter:
            class: App\CKFinder\CustomUploadAdapter
            tags:
                - { name: ckfinder.upload_adapter }
    
  3. Permissions & ACL Dynamically restrict file access per user:

    ckfinder:
        access_control:
            user_files: "@=(user.isAdmin())"
    

    Or use a custom callback:

    ckfinder:
        access_control:
            user_files: "@=service('app.ckfinder.acl').canAccess(file, user)"
    

Gotchas and Tips

Pitfalls

  1. License Key

    • Issue: Forgetting to set license_key in production throws CKFinderException.
    • Fix: Use environment variables:
      ckfinder:
          license_key: "%env(CKFINDER_LICENSE_KEY)%"
      
  2. File Permissions

    • Issue: Uploads fail silently if the upload_url directory lacks write permissions.
    • Fix: Ensure the web server user (e.g., www-data) owns the directory:
      chown -R www-data:www-data web/uploads
      chmod -R 755 web/uploads
      
  3. Asset URL Generation

    • Issue: ckfinder_asset() returns incorrect URLs if asset() is misconfigured.
    • Fix: Verify symfony_assets integration is enabled and base_url is set in config.yml:
      ckfinder:
          base_url: "%app.base_url%"  # e.g., "http://example.com"
      

Debugging

  • Enable Debug Mode Add to config.yml to log errors:

    ckfinder:
        debug: true
    

    Check var/log/ckfinder.log for upload/access issues.

  • Connector Errors If the /ckfinder/core/connector route returns JSON errors:

    {"error":{"code":1,"message":"Access denied."}}
    

    Verify:

    • access_control rules in config.yml.
    • User authentication (e.g., Symfony’s security system).

Extension Points

  1. Custom File Types Restrict allowed extensions via config.yml:

    ckfinder:
        allowed_file_types: ["jpg", "png", "pdf"]
    
  2. Event Listeners Hook into upload events:

    // src/AppBundle/EventListener/CKFinderListener.php
    use CKSource\CKFinderBundle\Event\UploadEvent;
    
    class CKFinderListener
    {
        public function onUpload(UploadEvent $event)
        {
            $file = $event->getFile();
            // Modify metadata, e.g., add watermark
        }
    }
    

    Register in services.yml:

    services:
        app.ckfinder.listener:
            class: App\EventListener\CKFinderListener
            tags:
                - { name: kernel.event_listener, event: ckfinder.upload, method: onUpload }
    
  3. Database Backend For non-filesystem storage (e.g., S3), implement a custom StorageAdapter:

    use CKSource\CKFinderBundle\CKFinder\Adapter\StorageAdapterInterface;
    
    class S3StorageAdapter implements StorageAdapterInterface
    {
        public function save($file, $destination)
        {
            // Upload to S3 and return public URL
        }
    }
    

    Register as the default adapter in config.yml:

    ckfinder:
        storage_adapter: "@app.s3_storage_adapter"
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin