2017-06-15 12 views
1

Dies liegt wahrscheinlich daran, dass ich nicht sehr gut mit PHP vertraut bin, aber hier ist: Ich benutze Fat-Free Framework, um ein Projekt zu erstellen und bin jetzt auf ein Problem gestoßen, das ich noch nicht gelöst habe /verstehen.

Dies wird in der Callback-Methode für eine Datei-Upload geschieht, die ich mit Fat-Free Web Erweiterung bin Handhabung, die receive($func=NULL,$overwrite=FALSE,$slug=TRUE) Methode (beide $func und $slug können Funktionen sein, die ich in der bin mit Beispiel unten). Mit dieser Erweiterung kann ich eine Funktion als Argument verwenden, um die Datei in irgendeiner Weise zu validieren, und eine andere, um den Dateinamen zu ändern.

Das Problem ist, dass ich keine der globalen $ f3-Variablen innerhalb dieser Methoden verwenden kann. Z.B. In dem folgenden Code können Sie sehen, ich möchte eine Variable zu überprüfen, welche die maximale Dateigröße ist erlaubt, aber wenn ich $this->f3->get('maxFileSizeMb') aufrufen, entweder direkt oder durch Zuweisen einer Variable früher in der Funktion, wird es den Code zu brechen.

$this->f3->set('UPLOADS','uploads/'.$this->f3->get('tmpMediaPath').'/'); 
$this->f3->set('maxFileSizeMb', 2); 
$this->f3->set('fileNameLenght', 30); 

// Using f3 \Web extension 
$overwrite = false; // set to true, to overwrite an existing file; Default: false 
// $slug = true; // we'll generate a new filename 
$web = \Web::instance(); 
$files = $web->receive(function($file,$formFieldName) { 

     // Check against the maximum allowed file size 
     if($file['size'] > (2 * 1024 * 1024)) // if bigger than 2 MB 
     //    >>>^<<< using $this->f3->get('maxFileSizeMb'); breaks the code 

      return false; // this file is not valid, return false will skip moving it 

     return true; // allows the file to be moved from php tmp dir to your defined upload dir 
    }, 
    $overwrite, 
    function($fileBaseName, $formFieldName){ 

     $fileExtension = ".tmp"; // Determine the true image type and rename it later on 
     // ##TODO## check if value is truly unique against the database. Here or elsewhere? 
     $randomName = bin2hex(openssl_random_pseudo_bytes(30)); 
     //           >>> ^^ <<< using $this->f3->get('fileNameLenght'); breaks the code 
     return $randomName.$fileExtension; 
    } 
); 

Vielen Dank im Voraus für jeden Eingang zu diesem Thema.

Antwort

1

Ja, ich wusste, das war ein Mangel an PHP-Kenntnisse. Sie müssen die Base-Instanz aufrufen, damit auf die Variablen zugegriffen werden kann. Das bedeutet, dass wir dies innerhalb dieser Funktionen aufrufen können, und es wird den Wert abzurufen:

$f3=Base::instance(); $maxFileSizeMb = $f3->get('maxFileSizeMb');

(Lösung aus einer ähnlichen Frage, dachte die Lösung nicht ganz zutreffend ist - zumindest konnte ich nicht alles machen die Alternativen funktionieren: Fat-Free-Framework global variables and functions)

Verwandte Themen