我使用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' => ...),
));
但是我想为每种形式做一次。哪种方式最好?
答案 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
,您将不需要添加配置每一次。