ckfinder/ckfinder-symfony2-bundle

CKFinder 3 包用于 Symfony 2

3.4.5 2019-04-03 16:31 UTC

This package is not auto-updated.

Last update: 2022-11-10 09:53:25 UTC


README

此仓库包含 CKFinder 3 包,用于 Symfony 2。

安装

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

    composer require ckfinder/ckfinder-symfony2-bundle
  2. AppKernel.php 中启用包。

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

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

    php app/console ckfinder:download

    它将下载代码并将其放置在包的 Resource/public 目录中。之后,您可能还想安装资产,以便更新 web 目录中的 CKFinder 代码。

    php app/console assets:install web
  4. app/config/routing.yml 中启用包路由。

    # app/config/routing.yml
    
    ckfinder_connector:
        resource: "@CKSourceCKFinderBundle/Resources/config/routing.yml"
        prefix:   /
  5. 为 CKFinder 文件创建一个目录并允许对其写入。默认情况下,CKFinder 期望它位于 web/userfiles(可以在配置中更改此位置)。

    mkdir -m 777 web/userfiles

注意:由于通常将权限设置为 0777 不安全,建议将目录的所有权更改为与 Apache 相同的用户,并添加组写权限。如有任何疑问,请联系系统管理员。

此时,您应在导航到 /ckfinder/connector?command=Init 路由后看到 CKFinder 连接器的 JSON 响应。CKFinder 的身份验证尚未配置,因此您将看到一个错误响应,表明 CKFinder 未启用。

配置身份验证

CKFinder 连接器身份验证由 ckfinder.connector.auth 服务管理,该服务默认在 CKSourceCKFinderBundle\Authentication\Authentication 类中定义。它包含一个返回布尔值的 authenticate 方法,以决定用户是否应该有权访问 CKFinder。如您所见,默认服务实现并不完整,并在 authenticate 方法中简单地返回 false,但您可以将其作为起始占位符代码找到。

要为 CKFinder 连接器配置身份验证,您需要创建一个实现 CKSource\Bundle\CKFinderBundle\Authentication\AuthenticationInterface 的类,并将 CKFinder 连接器指向它。

authenticate 方法返回 true(显然不安全)的基本实现如下所示

// src/AppBundle/CustomCKFinderAuth/CustomCKFinderAuth.php

namespace AppBundle\CustomCKFinderAuth;

use CKSource\Bundle\CKFinderBundle\Authentication\AuthenticationInterface;
use Symfony\Component\DependencyInjection\ContainerAware;

class CustomCKFinderAuth extends ContainerAware implements AuthenticationInterface
{
    public function authenticate()
    {
        return true;
    }
}

您可能已经注意到,AuthenticationInterface 扩展了 ContainerAwareInterface,因此您可以从身份验证类的作用域中访问服务容器。为了方便和节省一些代码行,上面的示例扩展了 ContainerAware

当您的自定义身份验证准备好后,您需要告诉 CKFinder 连接器开始使用它。为此,请将以下选项添加到您的配置中

# app/config/config.yml

ckfinder:
    connector:
        authenticationClass: AppBundle\CustomCKFinderAuth\CustomCKFinderAuth

配置选项

默认 CKFinder 连接器配置是从 CKSourceCKFinderBundle::Resources/config/ckfinder_config.php 文件中获取的。多亏了 Symfony 配置合并机制,您有多种方法可以覆盖它。默认配置以常规 PHP 文件的形式提供,但您可以使用您喜欢的格式(YAML、XML),只要结构有效即可。

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

# app/config/config.yml

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

从现在起,所有连接器配置选项都将从app/config/ckfinder_config.php中获取。

另一种配置CKFinder的方法是在您的app/config/config.yml中直接在ckfinder节点下包含所需的选项。

# app/config/config.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

使用方法

包代码包含了一些可能有用的使用示例。要启用它们,请在CKSourceCKFinderBundle::Resources/config/routing.yml中取消注释ckfinder_examples路由

ckfinder_examples:
    pattern:     /ckfinder/examples/{example}
    defaults: { _controller: CKSourceCKFinderBundle:CKFinder:examples, example = null }

之后,您可以通过访问/ckfinder/examples路径查看可用示例列表。要了解其背后的代码,请检查CKFinderController类(CKSourceCKFinderBundle::Controller/CKFinderController.php)。

在模板中包含主CKFinder JavaScript文件

在模板中包含ckfinder.js的最佳方式是包含以下所示的CKFinder设置模板

{% include "CKSourceCKFinderBundle::setup.html.twig" %}

包含的模板会渲染所需的script标签并配置一个有效的连接器路径。

<script type="text/javascript" src="/bundles/cksourceckfinder/ckfinder/ckfinder.js"></script>
<script>CKFinder.config( { connectorPath: '/ckfinder/connector' } );</script>

CKFinder文件选择器

包注册了一个表单字段类型—ckfinder_file_chooser—它允许将CKFinder轻松集成到您的表单中作为文件选择器。在CKFinder中选择文件后,相应的输入字段将自动填充文件URL。您可以在/ckfinder/examples/filechooser路径下查看一个工作示例。

文件选择器字段是基于常规的text类型构建的,因此继承了所有配置选项。它还提供了一些自定义选项

名称 类型 默认值 描述
mode 字符串 popup 点击“浏览”按钮后CKFinder将打开的模式。允许的值是modalpopup
button_text 字符串 浏览 按钮显示的文本。
button_attr 数组 [] 按钮元素的属性。

一个简单的使用示例可能如下所示

$form = $this->createFormBuilder()
             ->add('file_chooser1', 'ckfinder_file_chooser', array(
                 'label' => 'Photo',
                 'button_text' => 'Browse photos',
                 'button_attr' => array(
                     'class' => 'my-fancy-class'
                 )
             ))
             ->getForm();

注意:要在您的表单中使用CKFinder文件选择器,您仍然需要在模板中包含主CKFinder JavaScript文件(请参阅在模板中包含主CKFinder JavaScript文件)。