kocal / ckfinder-symfony-bundle
CKFinder 用于 Symfony 5+ 的包
Requires
- php: >=8.1
- ext-zip: *
- league/flysystem: ^3.0
- league/flysystem-aws-s3-v3: ^3.0.1
- monolog/monolog: ^2.0
- pimple/pimple: ^3.0
- symfony/console: ^6.0
- symfony/finder: ^6.0
- symfony/form: ^6.0
- symfony/framework-bundle: ^6.0
- symfony/http-client: ^6.0
- symfony/mime: ^6.0
Requires (Dev)
- aws/aws-sdk-php: ^3.269.8
- phpstan/phpstan: ^1.8
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- rector/rector: ^0.14.2
- symfony/yaml: ^6.0
- symplify/easy-coding-standard: ^10.1
README
ℹ️ 此项目是 官方且已弃用的 CKFinder Symfony Bundle 的分支。
此包完全兼容 Symfony 6.0 及更高版本(已移除 Symfony 3 和 4,有关 Symfony 5.4 的支持,请参阅 分支
1.x),兼容 PHP 8.1+、Flysystem 3+,并使用许多工具来确保代码质量(PHPUnit、Easy Coding Standard 和 Rector)以及功能齐全的 CI。
安装
-
添加 Composer 依赖项并安装包。
composer require kocal/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.yaml" 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(显然不安全)可能如下所示
Symfony 5+
// src/CustomCKFinderAuth/CustomCKFinderAuth.php namespace App\CustomCKFinderAuth; use CKSource\Bundle\CKFinderBundle\Authentication\Authentication as AuthenticationBase; class CustomCKFinderAuth extends AuthenticationBase { public function authenticate() { return true; } }
您可能已经注意到,AuthenticationInterface 扩展了 ContainerAwareInterface,因此您可以从身份验证类的作用域中访问服务容器。
当您的自定义认证准备就绪时,您需要通知CKFinder连接器开始使用它。为此,请将以下选项添加到您的配置中:
Symfony 5+
创建 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 文件到您的应用程序配置目录,然后在主配置文件中导入它。
Symfony 5+
# config/packages/ckfinder.yaml imports: - { resource: ckfinder_config.php } ...
从现在起,所有连接器配置选项都将从复制的 ckfinder_config.php 文件中获取。
另一种配置CKFinder的方法是在您的配置文件中的 ckfinder 节下包含所需的选项。
Symfony 5+
# 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 Connector 文档。
CKFinder捆绑包提供了两个额外的选项
authenticationClass– CKFinder认证服务类的名称(默认为CKSource\Bundle\CKFinderBundle\Authentication\Authentication)connectorClass– CKFinder连接器服务类的名称(默认为CKSource\CKFinder\CKFinder)
用法
捆绑包代码包含一些可能对您有用的用法示例。要启用它们,取消注释文件 @CKSourceCKFinder/Resources/config/routing.yaml 中的 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文件)。