使用 Symfony 在配置中使用路由作为 url

Use route as url in config with Symfony

我使用CKEditor,想使用uploadimage插件。我需要在 config.yml 中指定 uploadUrl。我怎样才能在这里放一条路线而不是直接 url?

ivory_ck_editor:
    default_config: my_config
    configs:
        my_config:
            extraPlugins: "lineutils,widget,notificationaggregator,uploadwidget,notification,uploadimage,wordcount"
            uploadUrl: '/admin/upload'

我知道我可以使用表单生成器重新定义配置

$builder->add('field', 'ckeditor', array(
    'config' => array('uploadUrl' => ...),
));

但我想为每个表格做一次。哪种方法最好?

如果将表单定义为服务,则可以注入路由器并使用它在表单中生成路径。 (这忽略了在 config.yml 中设置它的可能性。)

services:
    app.form.type.yourformtype:
        class: AppBundle\Form\YourFormType
        arguments: [@router]
        tags:
            - { name: form.type }

然后,在您的表单中:

<?php

namespace AppBundle\Form

use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractType;

class YourFormType extends AbstractType
{
    private $router;

    public __construct(Router $router)
    {
        $this->router = $router;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $uploadRouteName = 'app_admin_upload'; // Or whatever maps out to /app/admin, re: your original question

        ...

        $builder->add('field', 'ckeditor', array(
            'config' => array('uploadUrl' => $this->router->generate($uploadRouteName)),
        ));

        ...

    }
}

要真正为每个表单执行一次此操作,您应该考虑扩展 ckeditor 表单类型并使用 OptionsResolver.configureOptions 方法中将路由添加到 uploadUrl。然后更新服务定义以将路由器注入那个 class,并在 add 方法的第二个参数中代替 ckeditor,使用 YourCkeditorExtendedType::class,你不会每次都需要添加配置。