davidxu/yii2-wang-editor

一个基于Yii2框架的wangEditor编辑器

安装: 22

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

5.0.0 2024-07-18 19:33 UTC

This package is auto-updated.

Last update: 2024-09-18 20:04:34 UTC


README

这是一个所见即所得富文本编辑器wangEditor 5Yii2扩展。

这是一个所见即所得富文本编辑器wangEditor 5Yii2扩展。

功能

它支持在同一页面上使用多个wangEditor5实例。

本扩展支持同一个页面多个wangEditor实例。

它还通过使用七牛QETag支持秒传功能。

本扩展通过使用七牛QETag支持秒传功能。

分片上传也已启用。如果自定义的chunkSize大于系统大小(get_cfg_var('upload_max_filesize')),则将使用系统最大上传文件大小。

本扩展已设置为使用分片上传。如果设置的chunkSize大于系统设置值(get_cfg_var('upload_max_filesize')),将使用系统值。

您可以将文件上传到本地服务器或直接上传到七牛对象存储Kodo。

可以上传文件到本地服务器或者直接上传文件到七牛对象存储 Kodo。

有关更多七牛对象存储Kodo策略,请参阅七牛网站。

要了解七牛对象存储Kodo的更多信息和相关安全策略,请自行参考七牛官方网站。

我们使用自定义功能进行视频/图片的上传和插入。

本扩展采用自定义功能上传和插入视频/图片。

安装

安装此扩展的最佳方式是通过composer

安装本扩展最便捷的方法是通过Composer安装。

运行

php composer.phar require --prefer-dist davidxu/yii2-wang-editor

或增加

"davidxu/yii2-wang-editor": "*"

到您的composer.json文件的require部分。

composer.json相关区域。

使用方法

如果您想将文件信息存储在数据库中(MySQL/MariaDB),请通过以下方式执行迁移文件:

如果您想保存文件信息到数据库(MySQL/MariaDB),请首先执行以下迁移文件

yii migrate/up @davidxu/base/migrations

然后简单地在您的代码中使用它:

然后先这样使用

本地上传

视图端
<?php
use davidxu\weditor\Editor;
use yii\helpers\Url;

// without ActiveForm
echo Editor::widget([
    'model' => $model,
    'attribute' => 'image_src',
    'name' => 'image_src', // If no model and attribute pointed
    'url' => Url::to('@web/upload/local'),
    'clientOptions' => [
        // 'foo' => 'bar',
    ],
    'secondUpload' => true, // default false
    'getHashUrl' => Url::to('@web/upload/get-hash'), // required for secondUpload is true
    'uploadBasePath' => 'uploads/',
    'storeInDB' => true, // return file id in DB to image url instead of file url if true, migrate model db first. default true. If second upload is true, must be true
    'metaData' => ['foo' => 'bar',],
    'chunkSize' => '2M', // if more than `get_cfg_var('upload_max_filesize')`, will use system upload max filesize
]); ?>

<?php
// with ActiveForm
echo $form->field($model, 'image_src')
    ->widget(Dropzone::class, [
        'url' => Url::to('@web/upload/local'),
        // ....
]);?>
控制器端
use davidxu\base\actions\LocalAction;
use davidxu\base\models\Attachment;
use yii\web\Controller;

class UploadController extends Controller
{
    public function actions(): array
    {
        $actions = parent::actions();
        return ArrayHelper::merge([
            'local' => [
                'class' => LocalAction::class,
                'url' => Yii::getAlias('@web/uploads'), // default: '@web/uploads'. stored file base url,
                'fileDir' => Yii::getAlias('@webroot/uploads'), // default: '@webroot/uploads'. file store in this dirctory,
                'allowAnony' => true, // default false
                'attachmentModel' => Attachment::class,  // Or other extended ModelClass
            ],
        ], $actions);
    }
}

七牛上传

视图端
<?php
use davidxu\weditor\Editor;
use davidxu\base\enums\QiniuUploadRegionEnum;
use davidxu\base\enums\UploadTypeEnum;
use yii\helpers\Url;

echo Editor::widget([
    'model' => $model,
    'attribute' => 'image_src',
    'name' => 'image_src', // If no model and attribute pointed
    'url' => QiniuUploadRegionEnum::getValue(QiniuUploadRegionEnum::EC_ZHEJIANG_2),
    'drive' => UploadTypeEnum::DRIVE_QINIU,
    'clientOptions' => [
        // 'foo' => 'bar',
    ],
    // ...... (refer to local config in view)
]); ?>

<?php
// with ActiveForm
echo $form->field($model, 'image_src')
    ->widget(Dropzone::class, [
    'url' => QiniuUploadRegionEnum::getValue(QiniuUploadRegionEnum::EC_ZHEJIANG_2),
    'drive' => UploadTypeEnum::DRIVE_QINIU,
    'qiniuBucket' => Yii::$app->params['qiniu.bucket'],
    'qiniuAccessKey' => Yii::$app->params['qiniu.bucket'],
    'qiniuSecretKey' => Yii::$app->params['qiniu.bucket'],
    'qiniuCallbackUrl' => Yii::$app->params['qiniu.bucket'],
    // default 'qiniuCallbackBody' here, you can modify them.
//    'qiniuCallbackBody' => [
//        'drive' => UploadTypeEnum::DRIVE_QINIU,
//        'specific_type' => '$(mimeType)',
//        'file_type' => '$(x:file_type)',
//        'path' => '$(key)',
//        'hash' => '$(etag)',
//        'size' => '$(fsize)',
//        'name' => '$(fname)',
//        'extension' => '$(ext)',
//        'member_id' => '$(x:member_id)',
//        'width' => '$(imageInfo.width)',
//        'height' => '$(imageInfo.height)',
//        'duration' => '$(avinfo.format.duration)',
//        'store_in_db' => '$(x:store_in_db)',
//        'upload_ip' => '$(x:upload_ip)',
//    ];
    // ...... (refer to local config in view)
]);?>
控制器端
use davidxu\base\actions\QiniuAction;
use davidxu\base\models\Attachment;
use yii\web\Controller;
use yii\web\BadRequestHttpException;

class UploadController extends Controller
{
     /**
     * @throws BadRequestHttpException
     */
    public function beforeAction($action): bool
    {
        $currentAction = $action->id;
        $novalidateActions = ['qiniu'];
        if(in_array($currentAction, $novalidateActions)) {
            // disable CSRF validation
            $action->controller->enableCsrfValidation = false;
        }
        parent::beforeAction($action);
        return true;
    }
    public function actions(): array
    {
        $actions = parent::actions();
        return ArrayHelper::merge([
            'qiniu' => [
                'class' => QiniuAction::class,
                'url' => Yii::getAlias('@web/uploads'), // default: '@web/uploads'. stored file base url,
                'allowAnony' => true, // default false
                'attachmentModel' => Attachment::class,
            ],
        ], $actions);
    }
}

如果启用秒传功能,

如果启用秒传功能,

视图端
<?= Editor::widget([
    'secondUpload' => true,
    'getHashUrl' => Url::to('@web/upload/get-hash'), // required for secondUpload is true
    // ...... (other config in view)
]); 
?>
控制器端
use davidxu\base\actions\GetHashAction;
use davidxu\base\models\Attachment;
use yii\web\Controller;
use yii\helpers\ArrayHelper;

class UploadController extends Controller
{
    public function actions(): array
    {
        $actions = parent::actions();
        return ArrayHelper::merge([
            'get-hash' => [
                'class' => GetHashAction::class,
                'attachmentModel' => Attachment::class,
            ],
        ], $actions);
    }
}

享受乐趣!