web-dev-qa-db-ja.com

ファイルURIの生の相対パスを取得する

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方法ですか?またはこれを行うためのより良い解決策はありますか?

2
btemperli

「Drupal way」は常にファジーな用語です。通常、機能する答えは複数あるためです。

とにかく、もっと冗長でないものを探しているなら、 File オブジェクトを見てみると役に立ちます url() メソッドです。これにより、いくつかの手順が節約され、古いD7 ファイルモジュールAPI関数 (_file_load_のように)減価償却が予定されている場合、いくつかの作業を節約できます。

最後に、ネイティブのPHP関数を使用すると、移植性が高まるため、常に役立ちます。つまり、 parse_url() を使用すると、/dice必要なコンポーネントへのURL。

まとめると、rawurldecode(parse_url($file->url(), PHP_URL_PATH))はすべての関数呼び出しを1つの結果にまとめます。

2
Shawn Conn