ファイルURIからUrl
オブジェクトを作成するにはどうすればよいですか?パブリックファイルのURIをUrl::fromUri()
のパラメーターとして使用すると、このエラーが発生します。
UnexpectedValueException:外部URLには内部ルートパラメータがありません。 Drupal\Core\Url-> getRouteParameters()にあります。
$file = File::load($file_id);
$file_uri = $file->getFileUri();
$menu_link['url'] = Url::fromUri($file_uri);
ここに問題のクラスとメソッドがあります: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/function/Url%3A%3AfromUri/8.2.x
実際のURLを文字列形式で取得する必要はありません。ファイルを指すUrlクラスからUrlオブジェクトを生成する必要があることに注意してください。これは、メニューリンクのパスを変更しようとしているためです。残念ながら、これはDrupal 8。
これは私が使用しているコードです。
function teeprop_preprocess_menu__main(&$vars) {
foreach($vars['items'] as $key => $menu_link) {
if (!empty($menu_link['url']->getRouteParameters())) {
$node_id = $menu_link['url']->getRouteParameters()['node'];
$node_entity = Node::load($node_id);
$node_type = $node_entity->getType();
if ($node_type == 'pdf') {
$file_id = $node_entity->get('field_pdf_file')->getValue()[0]['target_id'];
$file = File::load($file_id);
// $file_url = $file->url();
$file_uri = $file->getFileUri();
$vars['items'][$key]['url'] = Url::fromUri($file_uri, ['absolute' => TRUE]);
}
}
}
}
私は以下があなたが必要とすることをするべきだと信じています:
_Url::fromUri(
File::load(1)->url()
);
_
(私はこれをローカルの8.4.2インストールでテストし、エラーなしでレンダリングできるUrlオブジェクトを生成します。)
関数は確かに非常に誤解を招くように命名されています。 ::fromUri()
soundsは、::getFileUri()
の戻り値、つまり_public://...
_を受け入れる必要があるように、実際には_internal:
_のみを受け入れます。 _base:
_、_entity:
_、および「外部」URL。
したがって、->url()
を使用してファイルの外部URLを取得し、それを::fromUri()
に渡す必要があります。