rovahub / ckfinder-laravel-package
Laravel的CKFinder 3包
Requires
- php: >=8.1.0
- ext-gd: *
- ext-json: *
- ext-zip: *
- laravel/framework: ^10.0
- league/flysystem: ^3.0
- league/flysystem-aws-s3-v3: ^3.0
- league/flysystem-azure-blob-storage: ^3.0
- league/flysystem-ftp: ^3.0
- pimple/pimple: ~3.0
- spatie/flysystem-dropbox: ^2.0
This package is auto-updated.
Last update: 2024-09-27 18:44:58 UTC
README
Laravel 9+ 的CKFinder 3包 
该存储库包含Laravel 9+的CKFinder 3包。如果您需要旧版Laravel的包,请使用版本3。
安装
-
添加Composer依赖并安装包。
composer require ckfinder/ckfinder-laravel-package
-
运行命令以下载CKFinder代码。
在安装Laravel包后,您需要下载CKFinder代码。由于许可证条款不同,它未包含在包中。要安装它,请运行以下
artisan
命令php artisan ckfinder:download
它将下载所需的代码并将其放置在包的适当目录中(
vendor/ckfinder/ckfinder-laravel-package/
)。 -
发布CKFinder连接器配置和资产。
php artisan vendor:publish --tag=ckfinder-assets --tag=ckfinder-config
这将把CKFinder资产发布到
public/js/ckfinder
,并将CKFinder连接器配置发布到config/ckfinder.php
。如果您需要自定义路由名称、不同的资产位置、文件浏览器自定义等,您还可以发布此包使用的视图。
php artisan vendor:publish --tag=ckfinder-views
最后,您可以使用单个命令发布包的配置、资产和视图。
php artisan vendor:publish --tag=ckfinder
-
为CKFinder文件创建一个目录并允许对它进行写入访问。默认情况下,CKFinder期望文件放置在
public/userfiles
(这可以在配置中更改)。mkdir -m 777 public/userfiles
注意:由于通常将权限设置为
0777
是不安全的,建议将目录的所有权更改为与Apache相同的用户,并添加组写权限。如果有任何疑问,请联系系统管理员。 -
CKFinder默认使用基于双重提交cookie的CSRF保护机制。在某些配置中,可能需要配置Laravel不加密CKFinder设置的cookie。
为此,请将cookie名称
ckCsrfToken
添加到EncryptCookies
中间件的$except
属性中// app/Http/Middleware/EncryptCookies.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', // ... ]; }
您还应该禁用Laravel的CSRF保护,以针对CKFinder的路径,因为CKFinder使用自己的CSRF保护机制。这可以通过将
ckfinder/*
模式添加到VerifyCsrfToken
中间件的$except
属性来完成:(app/Http/Middleware/VerifyCsrfToken.php)// app/Http/Middleware/VerifyCsrfToken.php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class VerifyCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'ckfinder/*', // ... ]; }
此时,您应该在导航到<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 认证中间件来保护它们。
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 连接器配置是从 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>