Эффективный способ обработки нескольких конфигов HTMLPurifier - PullRequest
1 голос
/ 06 апреля 2010

Я использую HTMLPurifier в текущем проекте, и я не уверен в наиболее эффективном способе обработки нескольких конфигов. По большей части единственное существенное изменение - это разрешенные теги.

В настоящее время у меня есть закрытый метод в каждом классе, использующий HTMLPurifier, который вызывается при необходимости конфигурации и создает ее по умолчанию. Я не очень доволен этим, как будто 2 класса используют один и тот же конфиг, это дублирует код, и что если классу нужно 2 конфига? Это просто грязно.

Единственный плюс в том, что он ленив в том смысле, что ничего не создает, пока не понадобится. Различные классы могут быть использованы и никогда не должны ничего очищать. Поэтому я не хочу создавать группу объектов конфигурации, которые могут даже не использоваться.

Я только недавно узнал, что вы можете создать новый экземпляр HTMLPurifier и напрямую установить параметры конфигурации, например, так:

$purifier = new HTMLPurifier();
$purifier->config->set('HTML.Allowed', '');

Я не уверен, что это дурной тон или нет, и если нет, то я не уверен, что это хороший способ использовать его.

Моя последняя идея состояла в том, чтобы создать класс обработчика конфигурации, который просто возвращал бы конфигурацию HTMLPurifier для использования в последующих вызовах очистки. В какой-то момент его, вероятно, можно было бы расширить, чтобы разрешить установку конфигов, но с самого начала я подумал, что они просто будут жестко запрограммированы и запустят параметр метода через переключатель, чтобы получить запрошенную конфигурацию. Возможно, я мог бы просто отправить хранимый экземпляр очистителя в качестве аргумента и сделать так, чтобы метод напрямую устанавливал конфигурацию на него, как показано выше?

Это мне кажется лучшим из немногих способов, о которых я думал, хотя я не уверен, оправдывает ли такое задание создание класса для его обработки, и если да, то если я справлюсь с ним наилучшим образом .

Я не слишком знаком с внутренней работой HTMLPurifier, поэтому я не уверен, существуют ли какие-либо более эффективные механизмы для обработки нескольких конфигов.

Спасибо за любые идеи, которые может предложить каждый.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Объекты конфигурации имеют один важный инвариант: после того, как они были использованы для очистки, их нельзя редактировать. Возможно, вас заинтересуют некоторые удобные методы , которыми обладает класс, в частности inherit, и вы можете загрузить массив значений, используя loadArray.

1 голос
/ 07 апреля 2010

Я только что написал быстрый, простой класс обработчика конфигурации.

Вы можете просмотреть / использовать его @ http://gist.github.com/358187/

Требуется массив конфигов при инициализации.

$configs = array(
  'HTML.Doctype' => 'HTML 4.01 Strict',

  'posts' => array(
    'HTML.Allowed' => 'p,a[href],img[src]'
  ),
  'comments' => array(
    'HTML.Allowed' => 'p'
  ),

  'default' => array(
    'HTML.Allowed' => ''
  )
);

Директивы, помещенные непосредственно в массив, являются глобальными и будут применяться ко всем конфигам. Если та же директива установлена ​​внутри именованного конфига, будет использоваться значение в названном конфиге.

Тогда вы можете получить конфиг так:

$purifierConfig = new purifierConfig($configs);
$commentsConfig = $purifierConfig->getConfig('comments');

или стенография:

$commentsConfig = $purifierConfig['comments'];

Если запрошенная конфигурация не существует или конфигурация не указана в вызове, будет возвращена конфигурация по умолчанию.

Я, вероятно, уточню это в какой-то момент, но пока это работает.

Я искал, как люди справляются с такими вещами в своих проектах или есть ли какие-то встроенные механизмы, которые делают что-то подобное более обтекаемым, но я полагаю, мой вопрос был слишком узким по объему.

...