2016-07-21 17 views
0

Ich FMElfinder in Verbindung mit TinyMCE mit für die Verwaltung des Vermögens (Bilder, PDF ...) des Benutzers (verwaltet mit FOSUSerBundle)Zugriff auf Benutzername in der Konfigurationsdatei für Symfony

Ich habe gesehen, dass Dieses Tool kann multiple root Ordner behandeln, aber in meinem Fall ist es nicht ganz verwendbar: Ich möchte einen Stammordner für jeden Benutzer haben.

In der Konfigurationsdatei app/config/config.yml gibt es den Wurzelpfad (e) definiert:

fm_elfinder: 
    instances: 
     default: 
      locale: %locale% 
      ... 
      connector: 
       roots: 
        uploads: 
         driver: LocalFileSystem 
         path: uploads/data 

Ich war thining über "einfach" wie den Weg zu etwas zu ändern:

path: uploads/data/{the_username} 

wo der Benutzername der Benutzername des aktuell angemeldeten Benutzer

ich tun kann

In einem Controller wäre
$user = $this->get('security.token_storage')->getToken()->getUser(); 
$username = $user->getUsername(); 

Aber ich weiß nicht, ob es möglich ist (und wenn ja, wie) für den Zugriff auf speziell den Benutzernamen des angemeldeten Benutzers in einer Konfigurationsdatei

Danke Wenn Sie Vorschläge haben

================== [EDIT] =============================== ============

Ich habe die override of configuration verwenden. Ich glaube, ich die Schritte gefolgt, aber ich habe nicht machen es Arbeit geschafft:

1 - Erstellen Sie die Klasse

use FM\ElfinderBundle\Model\ElFinderConfigurationProviderInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
class ElfinderConfigurator implements ElFinderConfigurationProviderInterface 
{ 
    protected $container; 
    protected $options; 

    /** 
    * @param ContainerInterface        $container 
    */ 
    public function __construct($options, ContainerInterface $container) 
    { 
     $this->container = $container; 
     $this->storage  = $container->get('security.token_storage'); 
     $this->options  = $options; 
    } 

    /** 
    * @param $instance 
    * 
    * @return array 
    */ 
    public function getConfiguration($instance) 
    { 
     //retrieve basepath 
     $basepath_abs = $this->container->get('kernel')->getRootDir()."/../web/uploads"; 
     $basepath = "uploads/data"; 

     //define path for user 
     $userid = $this->storage->getToken()->getUser()->getId(); 
     $root = $basepath.'/'.$userid; 
     $this->options['instances']['default']['connector']['roots']['uploads']['path'] = $root.'/root'; 
     $this->options['instances']['default']['connector']['roots']['uploads']['upload_max_size'] = '2M'; 
     $option = [ 
      'corsSupport' => false, 
      'roots' => $this->options['instances']['default']['connector']['roots'], 
     ]; 

     $root_abs = $basepath_abs.'/data/'.$userid; 
     //creates dir if not available 
     if (!is_dir($root_abs)) { 
      mkdir($root_abs.'/root', 0775, true); 
     } 

     return $option; 
    } 
} 

2 - Stellen Sie meinen Dienst:

myvendor.mybundle.elfinder_configurator: 
    class:  Myvendor\Mybundle\Services\ElfinderConfigurator 
    arguments: ["%fm_elfinder%", "@service_container"] 

3 - Anruf der Dienst in app/config/config.yml

fm_elfinder: 
    configuration_provider: myvendor.mybundle.elfinder_configurator 
    ... 

Es funktioniert teilweise: Wenn ich die elfinde öffnen, wird das Verzeichnis sind cor direkt erstellt, wenn sie nicht existieren. Aber es muss ein Pfadproblem, und ich bin mir nicht sicher, es ist gut überschrieben, weil: - Die Daumen werden nicht in elfinder angezeigt - Wenn ich das Bild in den Editor hinzufügen, habe ich nicht die richtige Pfad des Bildes, ich habe:

//app_dev.php/efconnect?cmd=file&target=l1_Q2FwdHVyZSBkJ8OpY3JhbiBkZSAyMDE2LTAxLTI0IDE0OjM2OjI0LnBuZw 

anstelle des tatsächlichen Pfad des Bildes (wenn ich diesen Weg nicht die Überschreibung verwenden, arbeitet das Werkzeug und gibt mir)

../../../../uploads/data/1/root/img1.png 

und Kein Bild wird angezeigt.

Auch wenn ich in der js Konsole suchen die

efconnect?cmd=open&target=&init=1&tree=1&_=1469377765664 

Ich sehe, dass uplMaxSize 200M,

ist enter image description here

in jedem Fall ist es keine js Fehler in der Konsole

+1

dies nicht möglich Nein, da die Konfiguration den Behälter zu kompilieren verwendet wird, die verwendet wird, von ALLEN Benutzern, lange bevor eine Sicherheitskomponente einen angemeldeten Benutzer gebunden hat. – mblaettermann

+0

@pbenard Welche Form? – mblaettermann

Antwort

2

Ich denke, Sie suchen nach einem benutzerdefinierten Konfigurationsprovider:
https://github.com/helios-ag/FMElfinderBundle/blob/master/Resources/doc/advanced-configuration.md#custom-configuration-provider

Sie dann den Token-Speicher in den Dienst injizieren konnte und den Benutzer von wie in jedem Controller holen:

services: 
    my_elfinder_configurator: 
    class:  Acme\DemoBundle\elFinder\UserAwareConfigurator 
    arguments: ["@token_storage", "%any_container_params%"] 
+0

Sorry für die lange Verzögerung :) Ich habe meine Antwort mit Ihrem Vorschlag bearbeitet. Ich komme näher, aber ob es eine falsche Einstellung (Pfad oder sonst) gibt, oder das kann nicht durch das Bündel erreicht werden. Es gibt keinen js-Fehler, aber die Bilder sind nicht richtig eingestellt. – Overdose

Verwandte Themen