web-dev-qa-db-ja.com

ノード編集リンクを生成

ノード編集リンクを動的に生成しようとしています。を使用して手動で作成できることを理解しています

$ editpath = '/node/'.$nid.'/edit';

しかし、私は次のようなサブフォルダを使用する複数のサイトを持っています

/ site1_subfolder/node/123/edit

そして

/ site2_subfolder/node/123/edit

ノードクラスを確認したところ、このリンクを生成するメソッドが見つかりませんでした。 NodeFormクラスがあることは確認しましたが、どちらかを利用できる静的メソッドはありませんでした。

ノードまたはノードIDを指定すると、その編集フォームへの管理者編集リンクを生成する方法はありますか?

注:それが不可能な場合は、サブフォルダー名を取得する関数を使用して問題ないので、$ editpath = '/'.$subfolder_name.'/node/'.$nid.'/edit';を実行できます。

しかし、その方法もわかりません。

更新:私は$ node-> toUrl()-> toString()を実行して直接パスを取得し、最後に編集を追加できると思いますが、これはエイリアスを与えるだけで、エイリアスを取得しない方法がありますこれとノードへの直接リンクを代わりに取得しますか?

6
Matt

ノードまたはノードIDを指定すると、その編集フォームへの管理者編集リンクを生成する方法はありますか?

絶対に、Urlクラスには fromRoute メソッドがあります。

$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl('edit', $url);
$build = [
  ...
  'link' => $link->toRenderable(),
];
7
Clive

ノードまたはノードIDを指定すると、その編集フォームへの管理者編集リンクを生成する方法はありますか?

_$node_自体がある場合は、 toUrl() メソッドを使用して、定義されたリンクの1つを取得できます。

_$url = $node->toUrl('edit-form');
$link = Link::fromTextAndUrl('Title', $url);
$build = [
  //...
  'link' => $link->toRenderable(),
];
_

エンティティのさまざまなリンク名は Node class の注釈にあります。

_/**
 * Defines the node entity class.
 *
 * @ContentEntityType(
 *   id = "node",
 *   ...
 *   links = {
 *     "canonical" = "/node/{node}",
 *     "delete-form" = "/node/{node}/delete",
 *     "delete-multiple-form" = "/admin/content/node/delete",
 *     "edit-form" = "/node/{node}/edit",
 *     "version-history" = "/node/{node}/revisions",
 *     "revision" = "/node/{node}/revisions/{node_revision}/view",
 *     "create" = "/node",
 *   }
 * )
 */
_
4
mpdonadio