web-dev-qa-db-fra.com

Comment éditez-vous le contenu d'une instance Drupal \ Core \ Render \ Markup via une fonction de prétraitement dans Drupal 8?

Après avoir fait quelques expérimentations, la seule façon que j'ai pu trouver pour obtenir la propriété string d'une instance de Drupal\Core\Render\Markup Est d'utiliser la méthode __toString():

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

Mais je suppose que ces soulignements initiaux indiquent qu'il s'agit d'une fonction privée, à ne pas utiliser à l'extérieur. Existe-t-il une meilleure méthode pour accéder au contenu? Mon objectif ultime est de modifier ce contenu d'une manière ou d'une autre.

5
chrisshattuck

Vous ne pouvez pas modifier le contenu. Il n'y a pas de méthode publique pour le changer.

Habituellement, vous la remplacez simplement par une nouvelle instance:

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

Le double trait de soulignement indique une fonction magique, qui serait appelée automatiquement si vous utilisez l'objet dans un contexte de chaîne. C'est en lecture seule.

Si vous souhaitez ajouter une chaîne à l'ancien balisage, ce serait un exemple de fonctionnement de la fonction magique __toString():

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

Vous pouvez invoquer la fonction magique __toString() en transtypant une chaîne: $markup = $variables['fields']['title']->content; (string) $markup === $markup->__toString();

3
benjifisher