CKFinder 3 – PHP 连接器文档
应用结构

CKFinder 是一个 Ajax 应用,其前端完全用 JavaScript 编写。它通过 JSON 消息与服务器通信。在服务器端,有一个用特定服务器语言编写的“连接器”,它处理前端请求。下图说明了这一点

应用结构概述

用于 PHP 的 CKFinder 3 连接器构建在以下 Symfony 2 组件之上

Pimple 用作依赖注入容器。

Flysystem 文件系统抽象层用于与多个 CKFinder 后端进行通信。

请求工作流程

依赖注入容器

CKFinder 主应用类,CKFinder,扩展了 Pimple\Container 并充当依赖注入容器(方法灵感来自 Silex)。所有定义的依赖项以延迟方式实例化 - 对象仅在应用生命周期中实际使用时才创建。

您可以在容器内部访问以下应用组件

对象类型描述
acl Acl CKFinder 访问控制列表。
backend_manager BackendFactory 负责后端实例化的工厂对象。
config Config CKFinder 配置。
csrf_token_validator 3.2.0DoubleSubmitCookieTokenValidator 用于验证请求中的 CSRF 令牌的 TokenValidatorInterface 的实现。
debug 布尔值指示应用是否在调试模式下运行的布尔标志。
dispatcher EventDispatcher 一个 Symfony EventDispatcher 实例。
exception_handler ExceptionHandler 异常处理程序。
kernel HttpKernel 一个 Symfony HttpKernel
logger Monolog\Logger 一个 Psr\Log\LoggerInterface 实例(默认情况下使用 FirePHPHandlerMonolog\Logger)。
request_stack RequestStack 一个 Symfony RequestStack
command_resolver CommandResolver CKFinder 命令解析器。
request_transformer 3.1.1JsonTransformer 用于将请求转换为连接器可以理解的格式的请求转换器实例。
working_folder WorkingFolder CKFinder WorkingFolder 对象,表示由资源类型及其后端、后端的根文件夹和在 currentFolder URL 参数中传递的相对路径定义的当前工作目录。

事件

CKFinder PHP 连接器提供了一组事件,可用于更改默认应用行为。每个事件都由其唯一的名称标识,并且可以被任意数量的侦听器监听。

要将侦听器附加到事件,您可以使用存储在应用依赖注入容器中的 dispatcher 对象

$dispatcher = $app['dispatcher'];
$dispatcher->addListener(CKFinderEvent::BEFORE_COMMAND_INIT, function(BeforeCommandEvent $e) {
// 您的事件侦听器逻辑。
});

您也可以使用 CKFinder::on() 简写方法

$ckfinder->on(CKFinderEvent::BEFORE_COMMAND_INIT, function(BeforeCommandEvent $e) {
// 您的事件侦听器逻辑。
});

在 HOWTO 的 磁盘配额记录用户操作 部分,您可以找到两个使用事件的示例插件。

beforeCommand 事件

这些事件在解析特定命令后触发,即决定应使用哪个命令类来处理当前请求。使用以下命名约定

ckfinder.beforeCommand.[lcfirst(command name)]

例如:ckfinder.beforeCommand.initckfinder.beforeCommand.deleteFiles

传递给事件侦听器的参数是 BeforeCommandEvent 类型的对象,它包含以下信息

  • CKFinder 应用对象(如所有 CKFinder 事件)。
  • 执行的命令的名称。
  • 解析的命令的对象。

在事件侦听器中,可以提供将在命令之前执行的任何其他代码,但也可以替换事件对象中包含的命令对象,因此将使用新提供的命令对象。提供的命令对象必须是有效的命令对象(即 CommandAbstract 类型的对象)。

请注意,这是一个通用事件,也可以用于插件提供的任何未在下面列出的命令。

事件名称CKFinderEvent 常量
ckfinder.beforeCommand.init CKFinderEvent::BEFORE_COMMAND_INIT
ckfinder.beforeCommand.copyFiles CKFinderEvent::BEFORE_COMMAND_COPY_FILES
ckfinder.beforeCommand.createFolder CKFinderEvent::BEFORE_COMMAND_CREATE_FOLDER
ckfinder.beforeCommand.deleteFiles CKFinderEvent::BEFORE_COMMAND_DELETE_FILES
ckfinder.beforeCommand.deleteFolder CKFinderEvent::BEFORE_COMMAND_DELETE_FOLDER
ckfinder.beforeCommand.downloadFile CKFinderEvent::BEFORE_COMMAND_DOWNLOAD_FILE
ckfinder.beforeCommand.fileUpload CKFinderEvent::BEFORE_COMMAND_FILE_UPLOAD
ckfinder.beforeCommand.getFiles CKFinderEvent::BEFORE_COMMAND_GET_FILES
ckfinder.beforeCommand.getFileUrl CKFinderEvent::BEFORE_COMMAND_GET_FILE_URL
ckfinder.beforeCommand.getFolders CKFinderEvent::BEFORE_COMMAND_GET_FOLDERS
ckfinder.beforeCommand.getResizedImages CKFinderEvent::BEFORE_COMMAND_GET_RESIZED_IMAGES
ckfinder.beforeCommand.imageEdit CKFinderEvent::BEFORE_COMMAND_IMAGE_EDIT
ckfinder.beforeCommand.imageInfo CKFinderEvent::BEFORE_COMMAND_IMAGE_INFO
ckfinder.beforeCommand.imagePreview CKFinderEvent::BEFORE_COMMAND_IMAGE_PREVIEW
ckfinder.beforeCommand.imageResize CKFinderEvent::BEFORE_COMMAND_IMAGE_RESIZE
ckfinder.beforeCommand.moveFiles CKFinderEvent::BEFORE_COMMAND_MOVE_FILES
ckfinder.beforeCommand.quickUpload CKFinderEvent::BEFORE_COMMAND_QUICK_UPLOAD
ckfinder.beforeCommand.renameFile CKFinderEvent::BEFORE_COMMAND_RENAME_FILE
ckfinder.beforeCommand.renameFolder CKFinderEvent::BEFORE_COMMAND_RENAME_FOLDER
ckfinder.beforeCommand.saveImage CKFinderEvent::BEFORE_COMMAND_SAVE_IMAGE
ckfinder.beforeCommand.thumbnail CKFinderEvent::BEFORE_COMMAND_THUMBNAIL

中间事件

这些事件在命令类内部触发,在任何重要操作(如上传文件、重命名、删除、移动文件和文件夹)发生之前。

事件名称CKFinderEvent 常量传递给侦听器的参数
ckfinder.copyFiles.copy CKFinderEvent::COPY_FILE CopyFileEvent
ckfinder.createFolder.create CKFinderEvent::CREATE_FOLDER CreateFolderEvent
ckfinder.deleteFiles.delete CKFinderEvent::DELETE_FILE DeleteFileEvent
ckfinder.deleteFolder.delete CKFinderEvent::DELETE_FOLDER DeleteFolderEvent
ckfinder.downloadFile.download CKFinderEvent::DOWNLOAD_FILE DownloadFileEvent
ckfinder.uploadFile.upload CKFinderEvent::FILE_UPLOAD FileUploadEvent
ckfinder.moveFiles.move CKFinderEvent::MOVE_FILE MoveFileEvent
ckfinder.renameFile.rename CKFinderEvent::RENAME_FILE RenameFileEvent
ckfinder.renameFolder.rename CKFinderEvent::RENAME_FOLDER RenameFolderEvent
ckfinder.saveImage.save CKFinderEvent::SAVE_IMAGE EditFileEvent
ckfinder.imageEdit.save CKFinderEvent::EDIT_IMAGE EditFileEvent
ckfinder.thumbnail.createThumbnail CKFinderEvent::CREATE_THUMBNAIL ResizeImageEvent
ckfinder.imageResize.createResizedImage CKFinderEvent::CREATE_RESIZED_IMAGE ResizeImageEvent

afterCommand 事件

这些事件在特定命令控制器方法(Command::execute())返回响应后触发。使用以下命名约定

ckfinder.afterCommand.[lcfirst(command name)]`

传递给事件侦听器的参数是 AfterCommandEvent 类型的对象,它包含以下信息

  • CKFinder 应用对象。
  • 执行的命令的名称。
  • 执行的命令的 Response 对象。

请注意,这是一个通用事件,也可以用于任何插件提供的命令。

事件名称CKFinderEvent 常量
ckfinder.afterCommand.init CKFinderEvent::AFTER_COMMAND_INIT
ckfinder.afterCommand.copyFiles CKFinderEvent::AFTER_COMMAND_COPY_FILES
ckfinder.afterCommand.createFolder CKFinderEvent::AFTER_COMMAND_CREATE_FOLDER
ckfinder.afterCommand.deleteFiles CKFinderEvent::AFTER_COMMAND_DELETE_FILES
ckfinder.afterCommand.deleteFolder CKFinderEvent::AFTER_COMMAND_DELETE_FOLDER
ckfinder.afterCommand.downloadFile CKFinderEvent::AFTER_COMMAND_DOWNLOAD_FILE
ckfinder.afterCommand.fileUpload CKFinderEvent::AFTER_COMMAND_FILE_UPLOAD
ckfinder.afterCommand.getFiles CKFinderEvent::AFTER_COMMAND_GET_FILES
ckfinder.afterCommand.getFileUrl CKFinderEvent::AFTER_COMMAND_GET_FILE_URL
ckfinder.afterCommand.getFolders CKFinderEvent::AFTER_COMMAND_GET_FOLDERS
ckfinder.afterCommand.getResizedImages CKFinderEvent::AFTER_COMMAND_GET_RESIZED_IMAGES
ckfinder.afterCommand.imageEdit CKFinderEvent::AFTER_COMMAND_IMAGE_EDIT
ckfinder.afterCommand.imageInfo CKFinderEvent::AFTER_COMMAND_IMAGE_INFO
ckfinder.afterCommand.imagePreview CKFinderEvent::AFTER_COMMAND_IMAGE_PREVIEW
ckfinder.afterCommand.imageResize CKFinderEvent::AFTER_COMMAND_IMAGE_RESIZE
ckfinder.afterCommand.moveFiles CKFinderEvent::AFTER_COMMAND_MOVE_FILES
ckfinder.afterCommand.quickUpload CKFinderEvent::AFTER_COMMAND_QUICK_UPLOAD
ckfinder.afterCommand.renameFile CKFinderEvent::AFTER_COMMAND_RENAME_FILE
ckfinder.afterCommand.renameFolder CKFinderEvent::AFTER_COMMAND_RENAME_FOLDER
ckfinder.afterCommand.saveImage CKFinderEvent::AFTER_COMMAND_SAVE_IMAGE
ckfinder.afterCommand.thumbnail CKFinderEvent::AFTER_COMMAND_THUMBNAIL

您也可以监听由 HttpKernel 组件分派的任何事件。请参阅 HttpKernel 事件信息表

有关事件和事件侦听器的更多信息,请阅读 Symfony EventDispatcher 组件 的文档。