web-dev-qa-db-ja.com

文字列として与えられたURIからURIを取得する方法

紐があります

$directory = "/home/ .../sites/default/files..."

私は絶対URLを取得しようとしました:

$MYURL = Url::fromUri("base://".$directory);

それは例外につながります!

誰かが文字列からURLを取得するために熱く説明できますか?

1
maen

あなたのコメントのためのThx、

しかし、私はコアモジュールを調査することで答えを見つけました:

preg_match('/sites(.*)/',$directory,$matches);
$url_new = $matches[1];
$MYURL = Url::fromUri('base:/sites'.$url_new, array('absolute' => TRUE))->toString();

これが他の人にも役立つことを願っています!

2
maen

その文字列だけに基づいて、URLを取得することはありません。現在のサイトのURLをどのように取得するのですか?

Drupalでは必要ありません。Ivanがコメントで推奨したように、

これは、ファイルがDrupalでアップロードされ、URIがある場合に行う方法です。

file_create_url($path)https://api.drupal.org/api/drupal/core!includes!file.inc/function/file_create_url/8

URIがない場合(たとえば、テーマ内のファイルにリンクする必要がある場合)、次を使用します。

drupal_get_path('theme', 'your_theme');

https://api.drupal.org/api/drupal/core%21includes%21bootstrap.inc/function/drupal_get_path/8

次に、現在の$ディレクトリのように、サーバーのルートに対して相対的ではなく、リンクテーマに対して相対的と組み合わせます。

$directory = "files/myfile.png";

次に、それらを一緒にジャムします。

$my_url = drupal_get_path('theme', 'your_theme')."/".$directory;

何らかの理由で完全なサイトURLが必要な場合は、global $base_url;(Drupalのグローバル変数)を使用するか、チェックアウトしてください https://stackoverflow.com/a/14500505/430191

2
marblegravy