bkstar123/laravel-ckfinder

Laravel 的 CKFinder 3 包

1.0.6 2022-12-05 17:06 UTC

This package is auto-updated.

Last update: 2024-09-05 20:58:22 UTC


README

Laravel 5.5+ 的 CKFinder 3 包 Tweet

Laravel version License Packagist Packagist Join newsletter Follow twitter

这是对 https://github.com/ckfinder/ckfinder-laravel-package 存储库的轻微定制。

此存储库包含 Laravel 5.5+ 的 CKFinder 3 包。

安装

  1. 添加 Composer 依赖并安装包。

    composer require bkstar123/laravel-ckfinder
  2. 运行命令下载 CKFinder 代码。

    安装 Laravel 包后,需要下载 CKFinder 代码。由于不同的许可协议,它不包括在包中。要安装它,运行以下 artisan 命令

    php artisan ckfinder:download

    它将下载所需的代码并将其放置在包的适当目录中(vendor/ckfinder/ckfinder-laravel-package/)。

  3. 发布 CKFinder 连接器配置和资源。

    php artisan vendor:publish --tag=ckfinder

    这将发布 CKFinder 资源到 public/js/ckfinder,并将 CKFinder 连接器配置发布到 config/ckfinder.php

  4. 为 CKFinder 文件创建一个目录并允许写入权限。默认情况下,CKFinder 预期文件位于 public/userfiles(可以在配置中更改)。

    mkdir -m 777 public/userfiles

注意:由于通常将权限设置为 0777 是不安全的,建议将目录的所有权更改为与 Apache 相同的用户,并添加组写权限。如有疑问,请联系系统管理员。

此时,您应该可以在导航到 <APP BASE URL>/ckfinder/connector?command=Init 地址后看到连接器 JSON 响应。CKFinder 的身份验证尚未配置,因此您将看到一个错误响应,表明 CKFinder 未启用。

配置身份验证

CKFinder 连接器身份验证由 中间件 类或别名处理。要创建自定义中间件类,请使用 artisan 命令

php artisan make:middleware CustomCKFinderAuth

新中间件类将出现在 app/Http/Middleware/CustomCKFinderAuth.php 中。将 config/ckfinder.php 中的 authentication 选项更改

$config['authentication'] = '\App\Http\Middleware\CustomCKFinderAuth';

CustomCKFinderAuth 类中的 handle 方法允许对 CKFinder 用户进行身份验证。一个基本的实现,从 authentication 可调用函数返回 true(显然 不安全),如下所示

public function handle($request, Closure $next)
{
    config(['ckfinder.authentication' => function() {
        return true;
    }]);
    return $next($request);
}

请参阅 CKFinder for PHP 连接器文档 了解有关此选项的更多信息。

注意:

  • 或者,您可以在 config/ckfinder.php 中设置配置选项 $config['loadRoutes'] = false;。然后,将 vendor/ckfinder/ckfinder-laravel-package/src/routes.php 中的路由复制到您的应用程序路由,例如 routes/web.php,以使用您的 Laravel 身份验证中间件进行保护。您还必须将控制器命名空间前缀添加反斜杠,以便 Laravel 不会预置默认的 App\Http\Controllers

例如

Route::any('/ckfinder/connector', '\CKSource\CKFinderBridge\Controller\CKFinderController@requestAction')
    ->name('ckfinder_connector');

Route::any('/ckfinder/browser', '\CKSource\CKFinderBridge\Controller\CKFinderController@browserAction')
    ->name('ckfinder_browser');
  • 禁用 /ckfinder/* 路由的 Laravel CSRF 保护,如下所示

app/Http/Middleware/VerifyCsrfToken.php 中添加

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        '/ckfinder/*'
    ];
}

CkFinder 连接器有其自己的 CSRF 保护机制。您还需要通知 Laravel 不对 CKfinder 的 ckCsrfToken cookie 进行加密,如下所示

app/Http/Middleware/EncryptCookies.php

<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        'ckCsrfToken'
    ];
}

配置选项

CKFinder 连接器配置取自 config/ckfinder.php 文件。

要了解更多可能的连接器配置选项,请参阅CKFinder for PHP 连接器文档

用法

该包代码包含了一些可能对你有用的用法示例。要启用它们,请取消注释vendor/ckfinder/ckfinder-laravel-package/src/routes.php中的ckfinder_examples路由。

// vendor/ckfinder/ckfinder-laravel-package/src/routes.php

Route::any('/ckfinder/examples/{example?}', '\CKSource\CKFinderBridge\Controller\CKFinderController@examplesAction')
    ->name('ckfinder_examples');

之后,你可以导航到<APP BASE URL>/ckfinder/examples路径,查看可用的示例列表。要了解这些示例背后的代码,请检查包中的views/samples目录(vendor/ckfinder/ckfinder-laravel-package/views/samples/)。

在模板中包含主要的CKFinder JavaScript文件

为了能在网页上使用CKFinder,你必须包含主要的CKFinder JavaScript文件。首选的方法是包含CKFinder设置模板,如下所示

@include('ckfinder::setup')

包含的模板将渲染所需的script标签并配置有效的连接器路径。

<script type="text/javascript" src="/js/ckfinder/ckfinder.js"></script>
<script>CKFinder.config( { connectorPath: '/ckfinder/connector' } );</script>

有用链接