UEditor Mini(umeditor)是百度推出的輕量級富文本編輯器,體積小、功能全、適合後台管理系統快速接入。本文基於 Yii2 Advanced 模板,詳細講解從資源部署、AssetBundle 擴展到表單綁定的完整流程。
backend/web/css/umeditor/(路徑自定,下文以此為例)。umeditor.config.js、umeditor.min.js、lang/zh-cn/zh-cn.js、themes/default/css/umeditor.css 等核心文件。修改 backend/assets/AppAsset.php,添加靜態方法註冊單個 CSS/JS,利用 depends 確保加載順序在核心資源之後:
<?php
namespace backend\assets;
use yii\web\AssetBundle;
class AppAsset extends AssetBundle {
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = []; public $js = [];
public $depends = ['yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset'];
// 按需加載 JS
public static function addScript($view, $jsFile) {
$view->registerJsFile($jsFile, [self::className(), 'depends' => 'backend\assets\AppAsset']);
}
// 按需加載 CSS
public static function addCss($view, $cssFile) {
$view->registerCssFile($cssFile, [self::className(), 'depends' => 'backend\assets\AppAsset']);
}
}
假設模型 Article 有 content 字段需富文本編輯:
<?php
use backend\assets\AppAsset;
use yii\widgets\ActiveForm;
use yii\helpers\Html;
AppAsset::register($this);
// 按需引入 umeditor 資源
AppAsset::addCss($this, '/css/umeditor/themes/default/css/umeditor.css');
AppAsset::addScript($this, '/css/umeditor/umeditor.config.js');
AppAsset::addScript($this, '/css/umeditor/umeditor.min.js');
AppAsset::addScript($this, '/css/umeditor/lang/zh-cn/zh-cn.js');
?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'content')->textarea(['style' => 'width:760px;height:500px;']) ?>
<?= Html::submitButton('保存', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?>
<?php $this->beginBlock('js-block') ?>
$(function () {
var um = UM.getEditor('article-content'); // ID 為 article-content
});
<?php $this->endBlock() ?>
<?php $this->registerJs($this->blocks['js-block'], \yii\web\View::POS_END); ?>
modelname-fieldname,即 article-content,傳給 UM.getEditor() 即可自動綁定。config.js → min.js → lang/zh-cn.js → css,AssetBundle depends 機制保證順序正確。umeditor.config.js 中 imageUrl、imagePath 指向後端上傳接口,返回格式 {state:"SUCCESS", url:"...", title:"...", original:"..."}。yii\helpers\HtmlPurifier 過濾 XSS;輸出時啟用 HtmlPurifier::process()。| 現象 | 原因 | 解決 |
|---|---|---|
| 編輯器不顯示/報錯 | JS 加載順序錯誤或路徑 404 | 檢查 Network 面板,確認 4 段 JS/CSS 均 200 |
| 圖片上傳失敗 | 後端接口返回格式不符 / 跨域 | 對照 UEditor 文檔調整返回 JSON,配置 CORS |
| 內容無法保存 | textarea 未同步編輯器內容 | 提交前調用 um.sync() 或監聽 contentChange 事件 |