在Symfony的配置中使用route作为url

时间:2016-10-06 10:07:21

标签: php symfony ckeditor symfony-forms

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

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' => ...),
));

但是我想为每种形式做一次。哪种方式最好?

1 个答案:

答案 0 :(得分:1)

如果您将表单定义为服务,则可以注入路由器并使用它来生成表单中的路径。 (这忽略了在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扩展uploadUrl表单类型并在configureOptions方法中将路由添加到OptionsResolver.。然后更新服务定义以将路由器注入该类,并在ckeditor方法的第二个参数中代替add,使用YourCkeditorExtendedType::class,您将不需要添加配置每一次。