web-dev-qa-db-ja.com

パブリックファイルディレクトリへのURLを取得するにはどうすればよいですか?

Filesystem::realpath を使用して、公開ファイルディレクトリへのpathを取得できます。

$path = $filesystem->realpath('public://');

しかし、public://のURLを取得するにはどうすればよいですか?

3
Tim
$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を取得できます。これはサービスベースのソリューションです!

8
ssibal

それを達成する別の方法。

$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コアまたは一部の設定の更新に関連している可能性があります。残念ながら、根本的な原因を見つけるのは簡単ではありません。この情報が誰かに役立つことを願っています。

0
Eugene

私が持っていました -

public://2019-03/YxoEy6.png

そして私は画像を取得しました-

<img class="item-logo" src="{{file_url(restricted_item.logo_name.logo )}}" alt="logo" />
0
Wasim Khan