Obtenez le répertoire du chemin public


8

Je veux enregistrer un fichier par programme dans un chemin public, et je veux savoir comment puis-je obtenir Public Directory pathdans Drupal 8. Dans Drupal 7, j'utiliserais le code suivant.

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

Quel est l'équivalent dans Drupal 8?


1
Les deux fonctions existent toujours, drupal_realpath () est juste obsolète. Si une fonction est obsolète, vous pouvez presque toujours simplement regarder son implémentation car elle appelle alors généralement le nouveau service / API. Vous pouvez également toujours rechercher les enregistrements de changement: drupal.org/list-changes/…
Berdir

1
En outre, deux commentaires connexes: 1. Vous enregistrez dans le chemin par défaut . Cela pourrait être public, mais ce pourrait aussi être autre chose. Vous pouvez simplement coder en dur public: // si vous voulez toujours qu'il soit en public. 2. La plupart des API peuvent gérer public: // directement, par exemple n'importe quel ou presque n'importe quel fichier * Fonctions PHP comme file_put_contents (). Il n'y a aucune raison de le convertir vous-même. En fait, certains wrappers de flux comme par exemple une implémentation de stockage amazon S3 ne le permettront même pas.
Berdir

Réponses:


20

Selon l' API realpath , vous pouvez l'obtenir avec:

\Drupal::service('file_system')->realpath(file_default_scheme() . "://");

Il vous manque la partie file_default_scheme (), cela ne fait rien. Mais cela existe toujours.
Berdir

Ajouté cela dans un montage.
Berdir

quand je fais cela, j'obtiens le répertoire files-private. Comment puis-je obtenir l'annuaire public
Diana

@Diana, le code ci-dessus devrait vous donner le chemin public. Pour obtenir le privé, vous pouvez faire ceci: \ Drupal :: service ('file_system') -> realpath ("private: //");
NickO

@NickO votre code ne fonctionne pas pour moi pour le chemin du système de fichiers privé
Adrian Cid Almaguer

0

Dans le cas où vous souhaitez obtenir uniquement "sites / défaut / fichiers" ou "sites / votre-multisite / fichiers", vous devez alors utiliser

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

// In your method.
print PublicStream::basePath();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.