2016-10-06 21 views
0

私はCKEditorを使用しており、uploadimageプラグインを使いたいです。 config.ymlにuploadUrlと指定する必要があります。どのように私はここに直接URLの代わりにルートを置くことができますか?symfonyの設定でURLを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' => ...), 
)); 

で設定を再定義することができます知っている。しかし、私はすべてのフォームに一度それをやってみたいです。どちらが最善の方法ですか?

答えて

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を拡張し、あなたを追加することを検討すべきであるすべてのフォームに一度これを行うにはOptionsResolver.を使用してconfigureOptionsメソッドでuploadUrlにルーティングしてください。次に、ルータをそのクラスに注入するためにサービス定義を更新し、addメソッドの第2引数にckeditorの代わりにYourCkeditorExtendedType::classを使用すると、毎回設定を追加する必要はありません。

+0

小さなもの:フォームをサービスとして定義した場合、フォームを作成するときは、フォームコンシューマーから取得し、フォーム作成ツールではなく、DIコンテナから取得する必要があります。それ以外の場合は、手作業でルーターを渡す必要があります。これは、このプロセスを煩雑にしないために多くの作業を犠牲にします。 –

関連する問題