Как отобразить вывод HTML из функции возврата PHP

У меня есть функция displayName в php, которая возвращает такую ​​строку:

"${name} <i class=\"fa fa-check-circle\" style=\"font-size:22px;color:green\"/>"
public function getDisplayName()
{
    /** @var Module $module */
    $module = Yii::$app->getModule('user');

    if ($module->displayNameCallback !== null) {
        return call_user_func($module->displayNameCallback, $this);
    }

    $name = '';

    $format = Yii::$app->settings->get('displayNameFormat');

    if ($this->profile !== null && $format == '{profile.firstname} {profile.lastname}') {
        $name = $this->profile->firstname . ' ' . $this->profile->lastname;          
        if (($this->profile->user_id == 1)){
            $check_mark = '<i class = "fa fa-check-circle" style = "font-size:22px;color:green"/>';
        }
        else{
            $check_mark = '';   
        }
    }

    // Return always username as fallback
    if ($name == '' || $name == ' ') {
        return $this->username;
    }

    return $name . ' '.  $check_mark;
}

Я вызываю эту функцию в своем компоненте следующим образом:

public function run() {
  return $this->render('containerProfileHeader', [ 'title' => $this->title, ]);
}
    
<h1 class = "<?= $classPrefix ?>"><?= Html::encode($title) ?></h1>
    
public function init() {
  parent::init();
  $this->title = $this->container->getDisplayName();
}

Ожидалось, что строка, возвращаемая getDisplayName(), будет отображаться в html как есть, но вместо этого я получил это:

Вопрос не ясен. Тем временем я лучше сделаю отступ в вашем коде. В любом случае, кажется, что у вас есть функция, возвращающая Name <i [...]/>, но вы хотите, чтобы она возвращалась <i [...]/> Name?

Diego D 31.12.2022 14:04

@DiegoD Я хочу показать вывод HTML-кода. HTML-код виден после имени, я хочу показать вывод HTML-кода. Например, теперь я получил вывод John <i class = "fa fa-check-circle" style = "font-size:22px;color:green"/>

developer_w 31.12.2022 14:07

@DiegoD Результат, который я получил: [Снимок экрана] [1] [1]: i.stack.imgur.com/JComL.png

developer_w 31.12.2022 14:15

хорошо, наконец, это ясно. Проблема в том, что ваша система шаблонов экранирует строку. Где вы вызываете свою функцию getDisplayName()? есть ключ к тому, как сказать, что строка повторяется как необработанная без экранирования

Diego D 31.12.2022 14:19

Публичная функция @DiegoD run() { return $this->render('containerProfileHeader', [ 'title' => $this->title, ]); } <h1 class = "<?= $classPrefix ?>"><?= Html::encode($title) ?></h1>

developer_w 31.12.2022 14:38

Публичная функция @DiegoD init() { parent::init(); $this->title = $this->container->getDisplayName(); }

developer_w 31.12.2022 14:39

@DiegoD И HTML-код в проверке: <a href = "#" data-contentcontainer-id = "1" data-guid = "1a261c8c-8b41-4932-ae24-d10f1fe6fded">Noman Maken&lt;i class = "fa fa -check-circle" style = "font-size:22px;color:green"/&gt;</a>

developer_w 31.12.2022 14:48

Я думаю, проблема в том, что вы используете Html::encode($title). Я не знаком с yii (выглядит так), но можете ли вы попытаться повторить строку, избегая обработки, выполняемой HTML::encode? это возможно?

Diego D 31.12.2022 15:25

@DiegoD получил это из исходного кода <h1>Noman Maken &lt;i class=&quot;fa fa-check-circle&quot; style=&quot;font-size:22px;color:green&quot;/&gt;</h1>, я думаю, что если я смогу заменить &lt на < и другое из javascript, тогда это может сработать, я пробовал это, но не работает.

developer_w 31.12.2022 17:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны попробовать функции echo() в функции возврата. Надеюсь, это сработает.

Это должен быть комментарий. Также функция никогда не должна нести ответственность за вывод содержимого.

DarkBee 31.12.2022 14:24
Ответ принят как подходящий

Проблема решена с

<?= Yii::$app->formatter->asHtml($title); ?>

Использовал

Yii::$app->formatter->asHtml вместо Html::encode

Другие вопросы по теме