Unescape для User flash message в symfony

Вывод неэкранированных (unescaped) данных в symfony 1.3/1.4 (flash – message)

Эскейпинг это конечно хорошо, но иногда надо таки вывести что-то без него.

<?php echo sfOutputEscaper::unescape( $sf_user->getFlash('notice') ) ?>

Используется такой вариант для вывода HTML кода в сообщении (например, чтобы быстро перейти куда-либо прямо из flash-сообщения).

Вывод неэкранированных (unescaped) данных в symfony 1.3/1.4

Коль скоро в symfony 1.3/1.4 по умолчанию включено экранирование (escaping) всех выводимых данных, вам рано или поздно понадобится вывести что-либо в неэкранированном виде. Судя по постоянным вопросам в коммьюнити, не все могут найти документацию по этому вопросу, поэтому публикую эту небольшую заметку.

Итак, во-первых, в помощь вам EscapingHelper. Подключить его можно так:

<?php
  use_helper('Escaping');
?>

Это даст нам возможность использовать такие методы как:

  • string esc_entities($value)
    Применяет htmlentities к $value.
  • string esc_js($value)
    Экранирование в C-стиле переданного значения, после того как будет выполнено {@link esc_entities()}.
  • string esc_js_no_entities($value)
    Экранирование в C-стиле переданного значения.
  • string esc_raw($value)
    А это как раз то что нам нужно – вывод неэкранированного значения.
  • string esc_specialchars($value)
    Применяет htmlspecialchars к $value.

Итак, если нам нужно просто вывести что-то, не экранируя, мы применяем  esc_raw().

Но, зачастую, нужно выводить не экранируя, значения из базы данных.

Для Doctrine, если мы получим значение через array access ($model[‘field’]) или как параметр объекта ($model->field), значение будет экранировано.

К счастью, доктрина имеет магические аксессоры к полям класса типа getField (реализовано через  __call()) и мы можем сделать такой вызов:

<?php
  echo $model->getField(ESC_RAW);
?>

Что поможет вам добиться нужного результата.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: