Holen Sie sich das öffentliche Pfadverzeichnis

8

Ich möchte Dateien programmgesteuert im öffentlichen Pfad speichern und möchte wissen, wie ich Public Directory pathin Drupal 8 gelangen kann . In Drupal 7 würde ich den folgenden Code verwenden.

drupal_realpath(file_default_scheme() . '://')

Was ist das Äquivalent in Drupal 8?

Yusef
quelle
1
Beide Funktionen existieren tatsächlich noch, drupal_realpath () ist nur veraltet. Wenn eine Funktion veraltet ist, können Sie fast immer nur ihre Implementierung betrachten, da sie dann normalerweise den neuen Dienst / die neue API aufruft. Sie können auch jederzeit die Änderungsdatensätze durchsuchen: drupal.org/list-changes/…
Berdir
1
Außerdem zwei verwandte Kommentare: 1. Sie speichern im Standardpfad . Das könnte öffentlich sein, aber es könnte auch etwas anderes sein. Sie können public: // einfach fest codieren, wenn Sie immer möchten, dass es öffentlich ist. 2. Die meisten APIs können public: // direkt verarbeiten, z. B. eine oder fast jede Datei * PHP-Funktionen wie file_put_contents (). Es gibt keinen Grund, es selbst zu konvertieren. In der Tat werden einige Stream-Wrapper wie z. B. eine Amazon S3-Speicherimplementierung dies nicht einmal zulassen.
Berdir

Antworten:

20

Laut realpath API können Sie es erhalten mit:

\Drupal::service('file_system')->realpath(file_default_scheme() . "://");
Berdir
quelle
Sie vermissen den Teil file_default_scheme (), dies macht nichts. Aber das gibt es immer noch.
Berdir
Das wurde in einer Bearbeitung hinzugefügt.
Berdir
Wenn ich das mache, bekomme ich das Verzeichnis files-private. Wie bekomme ich das öffentliche Verzeichnis
Diana
@ Diana Der obige Code sollte Ihnen den öffentlichen Pfad geben. Um das Private zu erhalten, können Sie Folgendes tun: \ Drupal :: service ('file_system') -> realpath ("private: //");
NickO
@ NickO Ihr Code funktioniert nicht für mich für den privaten Dateisystempfad
Adrian Cid Almaguer
0

Wenn Sie nur "sites / default / files" oder "sites / your-multisite / files" erhalten möchten, sollten Sie verwenden

// Add to the top of the file.
use Drupal\Core\StreamWrapper\PublicStream;

// In your method.
print PublicStream::basePath();
Luis Eduardo Telaya Escobedo
quelle