URIを含むファイルがあり、その生の相対パスを取得したいと考えています。
Uri:public://videos/Test Video.mp4
道: /sites/default/files/videos/Test Video.mp4
私はすでにこれを行う方法を見つけました:
$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
これはDrupal方法ですか?またはこれを行うためのより良い解決策はありますか?
「Drupal way」は常にファジーな用語です。通常、機能する答えは複数あるためです。
とにかく、もっと冗長でないものを探しているなら、 File
オブジェクトを見てみると役に立ちます url()
メソッドです。これにより、いくつかの手順が節約され、古いD7 ファイルモジュールAPI関数 (_file_load
_のように)減価償却が予定されている場合、いくつかの作業を節約できます。
最後に、ネイティブのPHP関数を使用すると、移植性が高まるため、常に役立ちます。つまり、 parse_url()
を使用すると、/dice必要なコンポーネントへのURL。
まとめると、rawurldecode(parse_url($file->url(), PHP_URL_PATH))
はすべての関数呼び出しを1つの結果にまとめます。