2016-10-06 2 views
0

Я использую CKEditor и хочу использовать плагин uploadimage. Мне нужно указать uploadUrl в config.yml. Как я могу поместить здесь маршрут вместо прямого url?Использовать маршрут как url ​​в конфигурации с Symfony

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

Если вы определяете свою форму как услугу, вы можете ввести маршрутизатор и использовать его для создания пути в вашей форме. (Это игнорирует возможность установки его в 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 formtype и добавить свой маршрут до uploadUrl в методе configureOptions с использованием OptionsResolver.. Затем обновите определение службы, чтобы ввести маршрутизатор в этот класс, а вместо ckeditor во втором аргументе - add, используйте YourCkeditorExtendedType::class, и вам не нужно будет добавлять конфигурацию каждый раз.

+0

Небольшая вещь: если вы определяете свою форму как услугу, когда вы ее создаете, вы должны сделать это, получив ее из контейнера DI, а не с помощью метода создания формообразователя. В противном случае вам придется вручную передать маршрутизатор к нему, что приведет к победе над многими работами, которые вы делаете, чтобы сделать этот процесс менее громоздким. –

Смежные вопросы