web-dev-qa-db-fra.com

Comment obtenir l'URL du répertoire des fichiers publics?

Je peux obtenir le chemin vers le répertoire des fichiers publics en utilisant Filesystem::realpath :

$path = $filesystem->realpath('public://');

Mais comment puis-je obtenir l'URL de public://?

3
Tim
$my_path = file_create_url("public://"); 

Fonctionnera certainement, mais cela ne vient pas d'un service. Permettez-moi d'en savoir plus à ce sujet!

Okey je l'ai trouvé! This est comment fonctionne file_create_url:

Et ceci est la ligne correspondante spécifique à la résolution de "public: //" (si vous êtes sûr que vous essayez de résoudre un uri "public: // ..."):

  if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaUri($uri)) {
  return $wrapper->getExternalUrl();
}

Ce qui signifie que vous devrez utiliser le service StreamWrapperManager, et après avoir appelé getViaUri, vous pourrez obtenir l'url externe. Il s'agit donc d'une solution basée sur les services !

8
ssibal

Une autre façon d'y parvenir.

$wrapper = \Drupal::service('stream_wrapper_manager')->getViaScheme(file_default_scheme());
return $wrapper::baseUrl();

renverra DOMAIN/sites/default/files pour mon cas. Pour 'public', $ wrapper appartient à la classe "PublicStream", vous pouvez vérifier d'autres méthodes à l'intérieur.

Je l'ai ajouté parce que cela fonctionne pour moi:

$my_path = file_create_url("public://");

Mais cela ne fonctionne pas:

if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaUri($uri)) {
  return $wrapper->getExternalUrl();
}

dans mon projet, il renvoie "public: //".

Peut-être que cela est lié à la mise à jour de Drupal Core ou certains paramètres. Malheureusement, il n'est pas facile de trouver la cause première. J'espère que ces informations seront utiles à quelqu'un.

0
Eugene

J'avais -

public://2019-03/YxoEy6.png

et j'ai obtenu l'image par -

<img class="item-logo" src="{{file_url(restricted_item.logo_name.logo )}}" alt="logo" />
0
Wasim Khan