Answer the question
In order to leave comments, you need to log in
Yii2 PurifyBehavior did I understand the logic correctly?
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);
}
}
}
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); //удалить пары пустых тегов
}
)
];
}
}
$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 с очисткой
[['img_preview', 'img_full'], 'file', 'extensions' => ['webp'], 'maxSize' => 1024*1024],
Answer the question
In order to leave comments, you need to log in
array_diff if I understood the question correctly
$new = Yii:$app-post;...
$delete = array_diff($old, $new); // Remove tags
$add = array_diff($new, $old); // Add tags
What's next and how - I won't write, FanatPHP will merge my solution anyway, and most likely his solution will be better!
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question