PurifyBehavior:
namespace common\components\behaviors;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use yii\helpers\HtmlPurifier;
class PurifyBehavior extends Behavior
{
public $attributes = [];
public $config = null;
public function events()
{
return [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
];
}
public function beforeValidate()
{
foreach ($this->attributes as $attribute) {
$this->owner->$attribute = HtmlPurifier::process($this->owner->$attribute, $this->config);
}
}
}
Model:
namespace backend\models;
use common\components\behaviors\PurifyBehavior;
use yii\db\ActiveRecord;
class Info extends ActiveRecord
{
public static function tableName()
{
return '{{info}}';
}
public function rules() {
return [
[['title', 'preview'], 'string', 'max' => 255, 'filter', 'filter' => ['strip_tags', 'trim'], 'required'],
['description_seo', 'string', 'filter', 'filter' => ['strip_tags', 'trim'], 'required'],
[['img_preview', 'img_full'], 'file', 'extensions' => ['webp'], 'maxSize' => 1024*1024],
['description', 'safe'],
];
}
public function behaviors()
{
return [
'purify' => array(
'class' => PurifyBehavior::className(),
'attributes' => array('description'),
'config' => function ($config) {
$def = $config->getHTMLDefinition(true);
$def->set('HTML.AllowedElements', array('p', 'span', 'h1', 'h2', 'h3', 'h4', 'a', 'br', 'strong', 'em', 'del', 'u', 'pre', 'code', 'blockquote')); // Разрешонные теги
$def->addAttribute('a', 'url', 'Text'); // Разрешить аттрибут url с очисткой
$def->addAttribute('a', 'title', 'Text'); // Разрешить аттрибут title с очисткой
$def->addAttribute('a', 'target', 'Text'); // Разрешить аттрибут target с очисткой
$def->addAttribute('p', 'style', 'Text'); // Разрешить аттрибут style с очисткой
$def->addAttribute('span', 'style', 'Text'); // Разрешить аттрибут style с очисткой
$def->addAttribute('del', 'style', 'Text'); // Разрешить аттрибут style с очисткой
$def->addAttribute('u', 'style', 'Text'); // Разрешить аттрибут style с очисткой
$def->addAttribute('em', 'style', 'Text'); // Разрешить аттрибут style с очисткой
$def->addAttribute('img', 'src', 'Text'); // Разрешить аттрибут src с очисткой
$def->addAttribute('img', 'alt', 'Text'); // Разрешить аттрибут alt с очисткой
$def->set('HTML.SafeIframe', true); // Сохранить iframe
$def->set('URI.SafeIframeRegexp', '%^(http:|https:)?//(www.youtube(?:-nocookie)?.com/embed/|player.vimeo.com/video/)%'); // Сохранить видео с youtube
$def->set('AutoFormat.RemoveEmpty', true); //удалить пары пустых тегов
$def->set('AutoFormat.RemoveEmpty.RemoveNbsp', true); //удалите пустой, даже если он содержит
$def->set('AutoFormat.AutoParagraph', true); //удалить пары пустых тегов
}
)
];
}
}
Вопросы:
1) Разрешаем только такие теги, все остальные будут удалены
$def->set('HTML.AllowedElements', array('p', 'span', 'h1', 'h2', 'h3', 'h4', 'a', 'br', 'strong', 'em', 'del', 'u', 'pre', 'code', 'blockquote'));
2) Разрешаем нужные аттрибуты тегов, и фильтруем их, все другие теги будут удалены
$def->addAttribute('a', 'url', 'Text'); // Разрешить аттрибут url с очисткой
3) Данные фотографии должны быть обязательно выбраны т.е они required, или нужно что то еще добавить?
[['img_preview', 'img_full'], 'file', 'extensions' => ['webp'], 'maxSize' => 1024*1024],
Я все верно понял?)