Filesystem::realpath
を使用して、公開ファイルディレクトリへのpathを取得できます。
$path = $filesystem->realpath('public://');
しかし、public://
のURLを取得するにはどうすればよいですか?
$my_path = file_create_url("public://");
間違いなく動作しますが、サービスからのものではありません。これについて詳しく調べましょう!
Okey I find it!This はfile_create_urlの仕組みです:
そして、これは "public://"解決に固有の対応する行です( "public:// ..." uriを解決しようとしていることが確かな場合):
if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaUri($uri)) {
return $wrapper->getExternalUrl();
}
つまり、StreamWrapperManagerサービスを使用する必要があり、getViaUriを呼び出した後、外部URLを取得できます。これはサービスベースのソリューションです!
それを達成する別の方法。
$wrapper = \Drupal::service('stream_wrapper_manager')->getViaScheme(file_default_scheme());
return $wrapper::baseUrl();
私の場合、DOMAIN/sites/default/filesを返します。 'public'の場合、$ wrapperはクラス「PublicStream」に属し、内部の他のメソッドを確認できます。
これは私のために働くので、私はそれを追加しました:
$my_path = file_create_url("public://");
しかし、これはうまくいきません:
if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaUri($uri)) {
return $wrapper->getExternalUrl();
}
私のプロジェクトでは、「public://」を返します。
Drupalコアまたは一部の設定の更新に関連している可能性があります。残念ながら、根本的な原因を見つけるのは簡単ではありません。この情報が誰かに役立つことを願っています。
私が持っていました -
public://2019-03/YxoEy6.png
そして私は画像を取得しました-
<img class="item-logo" src="{{file_url(restricted_item.logo_name.logo )}}" alt="logo" />