bsdrazor / ckfinder-symfony-bundle
适用于 Symfony 7.x+ 的 CKFinder 扩展包
Requires
- php: >=8.1.0
- ext-gd: *
- ext-json: *
- ext-zip: *
- league/flysystem: ^3.0
- league/flysystem-aws-s3-v3: ^3.0
- league/flysystem-azure-blob-storage: ^3.0
- league/flysystem-ftp: ^3.0
- monolog/monolog: ^3.0
- pimple/pimple: ~3.0
- spatie/flysystem-dropbox: ^2.0
- symfony/console: ^7.0
- symfony/event-dispatcher: ^7.0
- symfony/form: ^7.0
- symfony/framework-bundle: ^7.0
- symfony/http-foundation: ^7.0
- symfony/http-kernel: ^7.0
- symfony/mime: ^7.0
- symfony/yaml: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.11
- phpunit/phpunit: ~9.6
README
此仓库包含 CKFinder 3 扩展包,适用于 Symfony 6+。如果您在寻找旧版本 Symfony 的扩展包,请使用 版本 3。
安装
-
添加 Composer 依赖项并安装扩展包。
composer require bsdrazor/ckfinder-symfony-bundle
-
运行命令下载 CKFinder 分发包。
安装扩展包后,您需要下载 CKFinder 分发包。由于许可协议不同,它不包括在扩展包中。要安装它,请运行以下 Symfony 命令
php bin/console ckfinder:download
它将下载代码并将其放置在扩展包的
Resource/public
目录中。之后,您可能还希望安装资产,以便公共目录将更新为 CKFinder 代码。php bin/console assets:install
-
启用扩展包路由。
创建
config/routes/ckfinder.yaml
,内容如下# config/routes/ckfinder.yaml ckfinder_connector: resource: "@CKSourceCKFinderBundle/Resources/config/routing.yml" prefix: /
-
为 CKFinder 文件创建一个目录,并允许对该目录进行写入访问。默认情况下,CKFinder 预期它被放置在
<public folder>/userfiles
(这可以在配置中更改)。mkdir -m 777 public/userfiles
注意:由于通常将权限设置为 0777 是不安全的,建议将目录的组所有权更改为与 Apache 相同的用户,并添加组写入权限。如有疑问,请联系您的系统管理员。
此时,您应该在导航到 /ckfinder/connector?command=Init
路由后看到连接器 JSON 响应。CKFinder 的身份验证尚未配置,因此您将看到一个错误响应,表明 CKFinder 未启用。
配置身份验证
CKFinder 连接器身份验证由 ckfinder.connector.auth
服务管理,默认情况下在 CKSourceCKFinderBundle\Authentication\Authentication
类中定义。它包含一个 authenticate
方法,该方法应返回一个布尔值,以决定用户是否应有权访问 CKFinder。如您所见,默认服务实现并不完整,并在 authenticate
方法中简单地返回 false
,但您可以将它作为起始占位符代码找到它。
要为 CKFinder 连接器配置身份验证,您需要创建一个实现 CKSource\Bundle\CKFinderBundle\Authentication\AuthenticationInterface
的类,并将 CKFinder 连接器指向它。
一个基本实现从 authenticate
方法返回 true
(显然是不安全的),如下所示
// src/CustomCKFinderAuth/CustomCKFinderAuth.php namespace App\CustomCKFinderAuth; use CKSource\Bundle\CKFinderBundle\Authentication\Authentication as AuthenticationBase; class CustomCKFinderAuth extends AuthenticationBase { public function authenticate(): bool { return true; } }
您可能已经注意到,AuthenticationInterface
扩展了 ContainerAwareInterface
,因此您可以从身份验证类的作用域访问服务容器。
当您的自定义身份验证准备就绪时,您需要告诉 CKFinder 连接器开始使用它。为此,请在配置中添加以下选项
创建 config/packages/ckfinder.yaml
文件
# config/packages/ckfinder.yaml ckfinder: connector: authenticationClass: App\CustomCKFinderAuth\CustomCKFinderAuth
配置选项
默认 CKFinder 连接器配置来自 @CKSourceCKFinder/Resources/config/ckfinder_config.php
文件。多亏了 Symfony 配置合并机制,有多种方法可以覆盖它。默认配置以常规 PHP 文件的形式提供,但只要结构有效,您可以使用您喜欢的格式(YAML、XML)。
覆盖默认配置的最简单方法是复制 ckfinder_config.php
文件到您的应用程序配置目录,然后在主配置文件中导入它
# config/packages/ckfinder.yaml imports: - { resource: ckfinder_config.php } ...
从现在开始,所有连接器配置选项都将从复制的 ckfinder_config.php
中获取。
另一种配置 CKFinder 的方法是直接在您的配置文件中,在 ckfinder
节下包含所需选项。
# config/packages/ckfinder.yaml ckfinder: connector: licenseName: LICENSE-NAME licenseKey: LICENSE-KEY authenticationClass: AppBundle\CustomCKFinderAuth\CustomCKFinderAuth resourceTypes: MyResource: name: MyResource backend: default directory: myResource
注意:所有未定义的选项将使用默认配置文件中的选项。
要了解更多有关可能的连接器配置选项,请参阅 CKFinder 3 – PHP 连接器文档。
CKFinder 包提供两个额外选项
authenticationClass
– CKFinder 身份验证服务类名称(默认为CKSource\Bundle\CKFinderBundle\Authentication\Authentication
)connectorClass
– CKFinder 连接服务类名称(默认为CKSource\CKFinder\CKFinder
)
用法
包代码包含一些有用的使用示例。要启用它们,请在 @CKSourceCKFinder/Resources/config/routing.yml
中取消注释 ckfinder_examples
路由
ckfinder_examples: pattern: /ckfinder/examples/{example} defaults: { _controller: CKSource\Bundle\CKFinderBundle\Controller::examplesAction, example: null }
之后,您可以通过 /ckfinder/examples
路径导航并查看可用的示例列表。要了解它们背后的代码,请查看 CKFinderController
类(CKSourceCKFinderBundle::Controller/CKFinderController.php
)。
在模板中包含主 CKFinder JavaScript 文件
在模板中包含 ckfinder.js
的首选方法是在下面展示的 CKFinder 设置模板中包含它
{% include "@CKSourceCKFinder/setup.html.twig" %}
包含的模板渲染所需的 script
标签并配置有效的连接器路径。
<script type="text/javascript" src="/bundles/cksourceckfinder/ckfinder/ckfinder.js"></script> <script>CKFinder.config( { connectorPath: '/ckfinder/connector' } );</script>
CKFinder 文件选择器
该包注册了一个表单字段类型 — CKFinderFileChooserType
— 它允许将 CKFinder 作为文件选择器轻松集成到您的表单中。在 CKFinder 中选择文件后,相应的输入字段将自动填充文件 URL。您可以在 /ckfinder/examples/filechooser
路径下看到一个工作示例。
文件选择器字段基于常规的 text
类型构建,因此它继承所有配置选项。它还提供了一些自定义选项
一个简单的使用示例可能如下所示
$form = $this->createFormBuilder() ->add('file_chooser1', CKFinderFileChooserType::class, [ 'label' => 'Photo', 'button_text' => 'Browse photos', 'button_attr' => [ 'class' => 'my-fancy-class' ] ]) ->getForm();
注意:要在您的表单中使用 CKFinder 文件选择器,您仍然需要在您的模板中包含主 CKFinder JavaScript 文件(请参阅 在模板中包含主 CKFinder JavaScript 文件)。