Вывод неэкранированных (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 07.03.2010 at 02:46 | Permalink

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

  2. Dmitri
    Posted 04.05.2010 at 20:06 | Permalink

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

    echo $model->getRaw(‘field’)

    • hudson
      Posted 04.05.2010 at 21:24 | Permalink

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

      <?php
        echo $model->getField(ESC_RAW);
      ?>
  3. talisman
    Posted 16.08.2010 at 15:24 | Permalink

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

    • hudson
      Posted 18.08.2010 at 12:26 | 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="">

Get Adobe Flash playerPlugin by wpburn.com wordpress themes