J'ai un fichier avec un uri et je veux obtenir son chemin brut et relatif.
Uri: public://videos/Test Video.mp4
Chemin: /sites/default/files/videos/Test Video.mp4
J'ai déjà trouvé un moyen de le faire:
$file_uri = $file->getFileUri();
// public://videos/Test Video.mp4
$absolute_url = file_create_url($file_uri);
// https://www.example.com/sites/default/files/videos/Test%20Video.mp4
$relative_url = file_url_transform_relative($absolute_url);
// /sites/default/files/videos/Test%20Video.mp4
$relative_raw_url = rawurldecode($relative_url);
// /sites/default/files/videos/Test Video.mp4
Est-ce la voie Drupal? Ou existe-t-il une meilleure solution pour ce faire?
La "voie Drupal" est toujours un terme flou car il y a généralement plus d'une réponse qui fonctionne.
Quoi qu'il en soit, si vous recherchez quelque chose de moins verbeux, il serait utile de regarder l'objet File
et c'est la méthode url()
. Cela vous évite quelques étapes et peut vous faire économiser du travail si l'ancien D7 fonctions de l'API du module de fichiers est prévu pour amortissement (comme file_load
A).
Enfin, il est toujours utile d'utiliser les fonctions natives PHP quand vous le pouvez car elles rendent les choses plus portables. Pour dire parse_url()
vous permet de découper/dés les URL des composants que vous souhaitez.
En mettant tout cela ensemble, rawurldecode(parse_url($file->url(), PHP_URL_PATH))
rassemble tous vos appels de fonction pour un résultat.