2016-10-06 3 views
0

나는 CKEditor를 사용하며 uploadimage 플러그인을 사용하고 싶습니다. config.yml에 uploadUrl을 지정해야합니다. 직접 URL이 아닌 여기에 경로를 넣을 수 있습니까?symfony 설정으로 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 메서드의 두 번째 인수에 ckeditor 대신 YourCkeditorExtendedType::class을 사용하면 매번 구성을 추가 할 필요가 없습니다.

+0

하나의 작은 점 : 양식을 서비스로 정의한 경우 양식을 작성할 때 양식 작성 도구가 아닌 DI 컨테이너에서 가져와야합니다. 그렇지 않으면 수작업으로 라우터를 통과시켜야하므로이 프로세스를 덜 복잡하게 만드는 많은 작업을 수행 할 수 있습니다. –