in Профессиональное

Вывод неэкранированных (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);
?>

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

Надеюсь был полезен 😉

Оно же в моем блоге на хабре )) http://hudson.habrahabr.ru/blog/86024/

Write a Comment

Comment

*

  1. во view неэкранированные данные можно выводить так:

    echo $model->getRaw(‘field’)

    • Вы видимо не дочитали статью ) Там об этом тоже есть (но немного в другом формате):

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

  2. а если нужно вывести чего-то неэкранированное в backend где все задается через generator.yml, как быть?

    • Смотря что и где. В списке можно использовать партиалы и компоненты. Или же переопределить какой-то конкретный шаблон.