metra/metra-ckfinder

Symfony Metra 的 CKFinder 扩展包

安装: 1

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分支: 33

类型:symfony-bundle

3.5.3 2021-12-17 16:46 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:49 UTC


README

此仓库包含 CKFinder 3 扩展包用于 Symfony 3+。如果您需要用于 Symfony 2 的扩展包,请参阅此处

安装

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

    composer require ckfinder/ckfinder-symfony-bundle
  2. AppKernel.php 中启用扩展包。

    注意:此步骤仅适用于 Symfony 3。如果您使用 Symfony 4+,扩展包将自动注册。

    // app/AppKernel.php
    
    public function registerBundles()
    {
    	$bundles = [
    		// ...
    		new CKSource\Bundle\CKFinderBundle\CKSourceCKFinderBundle(),
    	];
    }
  3. 运行命令以下载 CKFinder 发行包。

    安装扩展包后,您需要下载 CKFinder 发行包。由于不同的许可协议,它不包含在扩展包中。要安装它,请运行以下 Symfony 命令

    php bin/console ckfinder:download

    它将下载代码并将其放置在扩展包的 Resource/public 目录中。之后,您还可以安装资源,以便公共目录将更新为 CKFinder 代码。

    php bin/console assets:install
  4. 启用扩展包路由。

    Symfony 3

    app/config/routing.yml 中启用扩展包路由

    # app/config/routing.yml
    
    ckfinder_connector:
        resource: "@CKSourceCKFinderBundle/Resources/config/routing.yml"
        prefix:   /

    Symfony 4+

    创建 config/routes/ckfinder.yml 并包含以下内容

    # config/routes/ckfinder.yml
    
    ckfinder_connector:
        resource: "@CKSourceCKFinderBundle/Resources/config/routing.yml"
        prefix:   /
  5. 为 CKFinder 文件创建一个目录并允许对其进行写入。默认情况下,CKFinder 预期它将放置在 <public folder>/userfiles(可以在配置中进行更改)。

    Symfony 3

    mkdir -m 777 web/userfiles

    Symfony 4+

    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 3

// src/AppBundle/CustomCKFinderAuth/CustomCKFinderAuth.php

namespace AppBundle\CustomCKFinderAuth;

use CKSource\Bundle\CKFinderBundle\Authentication\Authentication as AuthenticationBase;

class CustomCKFinderAuth extends AuthenticationBase
{
    public function authenticate()
    {
        return true;
    }
}

Symfony 4

// 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 3

app/config/config.yml 文件中添加以下配置

# app/config/config.yml

ckfinder:
    connector:
        authenticationClass: AppBundle\CustomCKFinderAuth\CustomCKFinderAuth

Symfony 4

创建 config/packages/ckfinder.yml 文件

# config/packages/ckfinder.yml

ckfinder:
    connector:
        authenticationClass: App\CustomCKFinderAuth\CustomCKFinderAuth

配置选项

默认 CKFinder 连接器配置来自 @CKSourceCKFinder/Resources/config/ckfinder_config.php 文件。感谢 Symfony 配置合并机制,您有多种方法可以覆盖它。默认配置以常规 PHP 文件的形式提供,但您可以使用您喜欢的格式(YAML、XML),只要结构有效即可。

覆盖默认配置的最简单方法是复制 ckfinder_config.php 文件到您的应用程序配置目录,然后在主配置文件中导入它。

Symfony 3

# app/config/config.yml

imports:
    ...
    - { resource: ckfinder_config.php }

Symfony 4

# config/packages/ckfinder.yml

imports:
    - { resource: ckfinder_config.php }
    
...

从现在开始,所有连接器配置选项都将从复制的 ckfinder_config.php 中获取。

另一种配置 CKFinder 的方法是直接在您的配置文件中,在 ckfinder 节下包含所需的选项。

Symfony 3

# app/config/config.yml

ckfinder:
    connector:
        licenseName: LICENSE-NAME
        licenseKey: LICENSE-KEY
        authenticationClass: AppBundle\CustomCKFinderAuth\CustomCKFinderAuth

        resourceTypes:
            MyResource:
                name: MyResource
                backend: default
                directory: myResource

Symfony 4

# config/packages/ckfinder.yml

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.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 文件)。