使用 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
,你不会每次都需要添加配置。
我使用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
,你不会每次都需要添加配置。