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

This entry was posted in Профессиональное and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

6 Comments

  1. Mamita
    Posted 2010/03/07 at 2:46 am | Permalink

    hudson.su – оказывается ещё и полезный )

  2. Dmitri
    Posted 2010/05/04 at 8:06 pm | Permalink

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

    echo $model->getRaw(‘field’)

    • hudson
      Posted 2010/05/04 at 9:24 pm | Permalink

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

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

  3. talisman
    Posted 2010/08/16 at 3:24 pm | Permalink

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

    • hudson
      Posted 2010/08/18 at 12:26 pm | Permalink

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

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">