web-dev-qa-db-ja.com

Drupal 8の前処理関数を使用して、Drupal \ Core \ Render \ Markupインスタンスのコンテンツをどのように編集しますか?

いくつかの実験を行った結果、_Drupal\Core\Render\Markup_のインスタンスからstringプロパティを取得できる唯一の方法は、__toString()メソッドを使用することです。

_$variables['fields']['title']->content->__toString();
_

しかし、これらの最初のアンダースコアは、これがプライベート関数であり、外部では使用されないことを示していると思います。コンテンツを取得するためのより良い方法はありますか?私の最終的な目標は、そのコンテンツを何らかの方法で変更することです。

5
chrisshattuck

コンテンツを編集することはできません。それを変更するパブリックメソッドはありません。

通常は、新しいインスタンスでオーバーライドするだけです。

_$variables['fields']['title'] = Drupal\Core\Render\Markup::create('New content');
_

二重下線は、文字列コンテキストでオブジェクトを使用すると自動的に呼び出される魔法の関数を示します。これは読み取り専用です。

古いマークアップに文字列を追加したい場合、それはマジック関数__toString()がどのように機能するかの例です:

_$variables['fields']['title'] = Drupal\Core\Render\Markup::create($variables['fields']['title'] . '!!!');
_
9
4k4

文字列にキャストすることで、マジック関数__toString()を呼び出すことができます:$markup = $variables['fields']['title']->content; (string) $markup === $markup->__toString();

3
benjifisher