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://
?
$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 !
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.
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" />