Symfony2에서 양식 필드의 기본값을 설정하는 방법은 무엇입니까?


137

텍스트 양식 필드의 기본값을 설정하는 쉬운 방법이 있습니까?


1
네,하지만이 질문에 주어진 답변이 만족스럽지 않거나 작동하지 않습니다 ... 왜 "-편집"을 추가하여 그 이유를 설명해
드리겠습니다

당신이 추구하는 '완벽한'솔루션은 필드에 'default_value'옵션이있는 것 같습니다. 것이며, 현재는하지 않습니다 난 당신이 찾고있는 완벽한 솔루션이 현재 존재 생각하지 않도록,. 유일한의 심포니 제공합니다 (링크 참조) 이다 데이터 옵션을 선택합니다. 따라서 if-then은 atm을 볼 수있는 유일한 방법입니다. 필드 자체에 'default_value'옵션이 있어도 본질적으로 내부적으로 동일한 작업을 수행한다고 생각합니다.
crysallus

또한, 아래의 의견에 따라 접근법 2의 답변을 수정했습니다. 이로 인해 포인트 2에서 언급 한 구문 문제가 해결되면 해당 주석을 편집 할 수 있습니다. 또는 문제가 무엇인지 알려 주시면 답변을 수정하겠습니다.
crysallus

1
@Crone이 질문에 2 년 전에 질문을 받았다
드레이 Slinták

1
OndrejSlinták 내가 참고 속는으로 중 닫습니다,하지만 투표를하지 않았다 @ : 그것은, 어느 쪽이 먼저 와서 중요하지 않습니다 " 새로운 문제는 다음 중복으로 이전을 닫습니다 투표, 더 나은 질문은 또는 더 나은 해답이있는 경우 새로운 한. "
제프 퍼켓

답변:


105

다음과 같이 생성하는 동안 쉽게 사용할 수 있습니다.

->add('myfield', 'text', array(
     'label' => 'Field',
     'empty_data' => 'Default value'
))

11
Symfony 2.1의 경우 'data'키를 다음과 같이 변경해야 했습니다.'value'
Edd

175
이것은 기본값을 설정할뿐만 아니라 모든 컨텍스트에서 항상 값을 강제합니다. 내가 "기본 값"이라고 부르는 것이 아니라 ...
Hubert Perron

4
이 솔루션은 문제에 대한 솔루션이 아니기 때문에 하향 조정했습니다 (허버트 페론이 위에서 언급했듯이). 이 게시물에서 더 나은 솔루션을 얻으려고 노력하고 있습니다 stackoverflow.com/questions/17986481/…
herrjeh42

13
이것은 초기 값이며, 기본값은empty_data
Pierre de LESPINAY

3
data쓸모가 없습니다-저장된 값을 덮어 씁니다. empty_data값을 표시하지 않고 빈 값 제출시 값을 사용하며 선택하지 않은 선택 사항을 저장할 수 없습니다.
moldcraft

115

당신은 기본값을 설정할 수 있습니다 empty_data

$builder->add('myField', 'number', ['empty_data' => 'Default value'])

29
데이터 설정이 기본값을 설정하지 않습니다. 이 답변은 정답입니다.
Alexei Tenitski

9
값없이 제출 된 경우에만 필드를 1로 설정 한 것으로 나타납니다. 값이 없을 때 입력에 양식이 기본값으로 1을 표시하도록하려는 경우는 어떻습니까?
Brian

내 테스트에서 empty_data는 빈 제출 필드에서 기본값을 무시할 수 없습니다 (예 : NULL 대신 0으로 데이터베이스에 저장하려는 경우). 이 버그는 지금까지 내가 말할 수있는 여전히 뛰어난입니다 : github.com/symfony/symfony/issues/5906
채드윅 마이어

63

나는 과거에 이것을 몇 번 생각 했으므로 내가 가지고 / 사용했던 다른 아이디어를 적어 놓을 것이라고 생각했습니다. 사용중인 것이있을 수 있지만 "완벽한"Symfony2 솔루션은 없습니다.

생성자 엔티티에서 $ this-> setBar ( 'default value'); 그러나 이것은 엔티티를로드 할 때마다 호출되며 (db 또는 not) 약간 지저분합니다. 그러나 날짜 또는 기타 필요한 것을 만들 수 있으므로 모든 필드 유형에 대해 작동합니다.

get 내의 문장 이 아니라면 당신은 할 수 있습니다.

return ( ! $this->hasFoo() ) ? 'default' : $this->foo;

팩토리 / 인스턴스 . 데이터로 미리 채워진 기본 엔티티를 제공하는 정적 함수 / 보조 클래스를 호출하십시오. 예 :

function getFactory() {
    $obj = new static();
    $obj->setBar('foo');
    $obj->setFoo('bar');

   return $obj;
}

추가 필드를 추가하면이 기능을 유지해야한다는 것이 실제로 이상적인 것은 아니지만 데이터 세트 / 기본값과 db에서 생성 된 데이터 세트를 분리한다는 의미입니다. 마찬가지로 다른 기본 데이터를 원할 경우 여러 getFactories를 가질 수 있습니다.

확장 / 반사 엔티티 생성시 (생성자를 통해) 기본 데이터를 제공하는 확장 엔티티 (예 : FooCreate extends Foo)를 만듭니다. 팩토리 / 인스턴스 아이디어와 비슷한 다른 접근법-정적 메서드를 개인적으로 선호합니다.

빌드 폼 전에 데이터 설정 생성자 / 서비스에서 새 엔터티가 있는지 또는 데이터베이스에서 데이터가 채워 졌는지 알 수 있습니다. 따라서 새로운 엔터티를 가져올 때 다른 필드에서 집합 데이터를 호출하는 것이 그럴듯합니다. 예 :

if( ! $entity->isFromDB() ) {
     $entity->setBar('default');
     $entity->setDate( date('Y-m-d');
     ...
}
$form = $this->createForm(...)

양식 이벤트 을 만들 때 필드를 만들 때 기본 데이터를 설정합니다. 이 PreSetData 이벤트 리스너를 대체합니다. 이것의 문제는 폼 워크로드 / 코드 복제와 유지 관리 / 이해가 어렵다는 것입니다.

확장 폼 폼 이벤트와 비슷하지만 db / new 엔티티인지에 따라 다른 유형을 호출합니다. 즉, 편집 양식을 정의하는 FooType이 있고 BarType은 FooType을 확장하고 모든 데이터를 필드로 설정합니다. 그런 다음 컨트롤러에서 간단히 어떤 양식 유형을 선택해야하는지 선택하십시오. 그래도 이벤트와 같은 사용자 정의 테마가 있으면 짜증이납니다.

나뭇 가지 필드별로 수행 할 때 고유 한 테마를 만들고 값 옵션을 사용하여 데이터를 기본값으로 지정할 수 있습니다. 템플릿을 깨끗하게 유지하고 재사용 할 수있게하려면 양식 테마로 래핑하지 마십시오. 예 :

form_widget(form.foo, {attr: { value : default } });

JS 필드가 비어 있으면 JS 함수로 양식을 채우는 것이 쉽지 않습니다. 예를 들어 자리 표시 자로 무언가를 할 수 있습니다. 이것은 좋지 않은 아이디어입니다.

서비스로서의 폼 제가 수행 한 큰 폼 기반 프로젝트 중 하나를 위해 모든 폼을 생성하고 모든 처리 등을 수행하는 서비스를 만들었습니다. 이는 폼이 여러 환경에서 여러 컨트롤러에 걸쳐 폼을 사용되기 때문입니다. 같은 방식으로 생성 / 처리되었으며, 서로 다르게 표시 / 상호 작용되었습니다 (예 : 오류 처리, 리디렉션 등). 이 방법의 장점은 데이터를 기본 설정하고 필요한 모든 작업을 수행하며 일반적으로 오류를 처리하는 등 모든 작업을 한 곳에서 캡슐화 할 수 있다는 것입니다.

결론 내가 본 것처럼, 당신은 같은 문제를 반복해서 겪게 될 것입니다. 기본 데이터는 어디에 있습니까?

  • db / doctrine 수준에서 저장하면 매번 기본값을 저장하지 않으려면 어떻게됩니까?
  • 엔터티 수준에서 저장하면 데이터가없는 다른 곳에서 해당 엔터티를 재사용하려는 경우 어떻게됩니까?
  • 엔티티 레벨에 저장하고 새 필드를 추가하는 경우 편집시 이전 버전이 해당 기본값을 갖도록 하시겠습니까? DB의 기본값도 마찬가지입니다 ...
  • 양식 수준에서 저장하면 나중에 코드를 유지 관리 할 때 분명합니까?
  • 생성자에있는 경우 여러 장소에서 양식을 사용하면 어떻게됩니까?
  • JS 수준으로 푸시하면 너무 멀어졌습니다. 데이터는 JS에 신경 쓰지 않아야합니다 (우리는 호환성, 렌더링 오류 등을 무시하고 있습니다)
  • 이 서비스는 여러 곳에서 사용하는 경우 훌륭하지만 한 사이트에서 간단한 추가 / 편집 양식을 사용하면 과도합니다 ...

이를 위해 매번 문제에 다르게 접근했습니다. 예를 들어 가입 양식 "뉴스 레터"옵션은 양식을 만들기 직전에 생성자에서 쉽고 논리적으로 설정됩니다. 서로 연결된 양식 모음을 만들 때 (예 : 서로 다른 양식 유형의 라디오 단추가 서로 연결됨) 이벤트 리스너를 사용했습니다. 더 복잡한 엔터티 (예 : 자식 또는 많은 기본 데이터가 필요한 엔터티)를 만들 때 필요에 따라 요소 (예 : 'getFactory')를 사용하여 요소를 만들었습니다.

이 요구 사항이있을 때마다 약간 다른 방식으로 "올바른"접근 방식이 있다고 생각하지 않습니다.

행운을 빕니다! 나는 당신에게 어떤 식 으로든 생각할 음식을 주었고 너무 많이 흔들리지 않았기를 바랍니다.)


'모든 양식을 생성하는 서비스'에 대해 당신이 의미하는 바에 대해 좀 더 자세히 설명해 주시겠습니까? 나는 또한 실제로 양식 중심의 프로젝트를 진행하고 있으며 다른 관점을 갖는 것이 좋을 것입니다.
user2268997

2
교리를 사용할 때 엔티티가 db에서로드 될 때 생성자가 호출되지 않습니다.
NDM

43

기본값을 설정해야하고 양식이 엔터티와 관련이 있으면 다음 방법을 사용해야합니다.

// buildForm() method
public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
    ...
    ->add(
        'myField',
        'text',
        array(
            'data' => isset($options['data']) ? $options['data']->getMyField() : 'my default value'
        )
    );
}

그렇지 않으면 myField엔터티에서 값을 가져 오는 대신 항상 기본값으로 설정됩니다.


대신 개체의 배열의 경우, 바로 교체 $options['data']->getMyField()와 함께$option['data']['myField']
GGG

3
이것이 추가 / 업데이트에 모두 올바른 방법이라고 생각합니다. 그러나 나는 Symfony가 너무 복잡해지기를 싫어합니다.
Yarco

이것이 유일한 좋은 대답입니다. 문서를 볼 때 다른 답변을 이해하지 못합니다. empty_data:이 옵션은 제출 된 값이 비어있을 때 필드가 반환 할 값을 결정합니다. 초기 값을 설정하지 않습니다
Vincent Decaux


16

양식이 엔터티에 바인딩 된 경우 construct 메소드를 사용하여 엔터티 자체의 기본값을 설정하십시오.

public function __construct()
{
    $this->field = 'default value';
}

그럼에도 불구하고 양식에 추가 필드를 엔티티 ( 'mapped' => false)에 매핑하지 않을 수 있습니다 . setData(...)이것들을 위해 사용하십시오 .
Dizzley

12

접근법 1 ( http://www.cranespud.com/blog/dead-simple-default-values-on-symfony2-forms/ )

변수 선언 또는 생성자에서 엔티티의 기본값을 간단히 설정하십시오.

class Entity {
    private $color = '#0000FF';
    ...
}

또는

class Entity {
    private $color;

    public function __construct(){
         $this->color = '#0000FF';
         ...
    }
    ...
}

위 링크의 주석에서 접근법 2와 Symfony2에서 양식 필드의 기본값을 설정하는 방법 에서 Dmitriy의 답변 (허용되지 않음) ?

Dmitriy의 답변에 맞게 FormBuilder로 필드를 추가 할 때 데이터 속성에 기본값을 추가하십시오.

이 속성 속성 기존 엔터티가 아닌 새로운 엔터티 인 경우 에만 null 값을 습니다.

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('color', 'text', array(
            'label' => 'Color:',
            'data' => (isset($options['data']) && $options['data']->getColor() !== null) ? $options['data']->getColor() : '#0000FF'
        )
    );
}

첫 번째는 작동하고 (감사합니다!) 두 번째는 작동하지 않습니다 : $ options [ "data]는 항상 설정되어 있으므로 기본값은 사용되지 않습니다. 솔루션 번호 1이 의도 한 방법인지 여전히 궁금합니다. 그것을하기 위해 ...
herrjeh42

당신은 항상 $ options [ 'data']에 대해 맞습니다. 엔티티 필드를 초기화하지 않으면 대신 필드에서 null을 테스트 할 수 있습니다. 'data'=> $ options [ 'data']-> getColor ()! == null? etc ... 이는 null이 색상 필드에 유효한 값이 아니라고 가정하므로 기존 엔티티는 해당 필드에 대해 null 값을 가지지 않습니다.
crysallus

아, 멍청한 나 : 'isset ($ $ options ['data ']-> getColor ())'로 시도했는데 "컨텍스트 작성에 사용할 수 없습니다"라는 오류 메시지가 표시되어 잊어 버렸습니다. 다르게 확인 :-)
herrjeh42

1
실제로 데이터 입력이 설정되지 않은 경우가 있습니다. isset ($ options [ 'data']) && $ options [ 'data']-> getColor ()! == null 모두 테스트하는 것이 더 안전합니다. ...
crysallus

9

예를 들어 form message과 같은 기본값을 설정할 수 있습니다 .

$defaultData = array('message' => 'Type your message here');
$form = $this->createFormBuilder($defaultData)
    ->add('name', 'text')
    ->add('email', 'email')
    ->add('message', 'textarea')
    ->add('send', 'submit')
    ->getForm();

양식이 엔터티에 매핑 된 경우 다음과 같이 할 수 있습니다 (예 : 기본 사용자 이름).

$user = new User();
$user->setUsername('John Doe');

$form = $this->createFormBuilder($user)
    ->add('username')
    ->getForm();

2
특히 대부분의 응용 프로그램에서 양식을 만들고 양식을 처리하는 엔터티를 전달하기 때문에이 방법을 선호합니다.
22시 58 분

9

주로 클래스가없는 양식을 사용하거나 기본값을 설정하기 위해 서비스에 액세스해야 할 때 모든 사례 / 접근 방식에 대한 일반적인 솔루션 :

// src/Form/Extension/DefaultFormTypeExtension.php

class DefaultFormTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if (null !== $options['default']) {
            $builder->addEventListener(
                FormEvents::PRE_SET_DATA,
                function (FormEvent $event) use ($options) {
                    if (null === $event->getData()) {
                        $event->setData($options['default']);
                    }
                }
            );
        }
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefault('default', null);
    }

    public function getExtendedType()
    {
        return FormType::class;
    }
}

양식 확장명을 등록하십시오.

app.form_type_extension:
    class: App\Form\Extension\DefaultFormTypeExtension
    tags:
        - { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }

그런 다음 default모든 양식 필드에서 옵션을 사용할 수 있습니다 .

$formBuilder->add('user', null, array('default' => $this->getUser()));
$formBuilder->add('foo', null, array('default' => 'bar'));

이것은 가장 좋은 답변으로 받아 들여 져야합니다. (최신)
medunes

7

사용하지 마십시오 :

'data' => 'Default value'

여기를 읽으십시오 : https://symfony.com/doc/current/reference/forms/types/form.html#data

"데이터 옵션은 렌더링 할 때 항상 도메인 데이터 (객체)에서 가져온 값을 재정의합니다. 이는 양식이 이미 지속 된 객체를 편집 할 때 객체 값도 무시되므로 양식을 제출할 때 지속 된 값이 손실됩니다."


다음을 사용하십시오.

이 예에서는 Entity Foo가 있고 "active"필드가 있습니다 (이 예에서는 CheckBoxType이지만 프로세스는 다른 모든 유형과 동일 함). 기본적으로 확인하려는 경우

FooFormType 클래스에서 다음을 추가하십시오.

...
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
...
public function buildForm( FormBuilderInterface $builder, array $options )
{
    ...

    $builder->add('active', CheckboxType::class, array(
        'label' => 'Active',
    ));

    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function(FormEvent $event){                 
            $foo = $event->getData();
            // Set Active to true (checked) if form is "create new" ($foo->active = null)
            if(is_null($foo->getActive())) $foo->setActive(true);
        }
   );
}
public function configureOptions( OptionsResolver $resolver )
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle:Foo',
    ));
}

이것은 돈이다! 양식 이벤트 리스너를 사용하여 기본값을 설정하기 전에 값을 확인하십시오. 이것은 새 조치와 편집 조치 모두에 대해 작동하므로 양식의 기본값에 허용되는 답변이어야합니다.
tlorens

이것이 올바른 처리 방법이며 허용되는 답변이어야합니다.
Bettinz

조건부 / 삼항을 사용하는 경우 처음에 언급 한 내용은 사실이 아닙니다. : 이것처럼'data' => $data['myfield'] ?? 'Default value'
xarlymg89

6
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
     $form = $event->getForm(); 
     $data = $event->getData(); 

     if ($data == null) {
         $form->add('position', IntegerType::class, array('data' => 0));
     }

});

이것은 좋은 해결책입니다. $event->setData()필드를 읽는 대신 호출 하면 더 나아질 수 있습니다.
user2268997

5

내 해결책 :

$defaultvalue = $options['data']->getMyField();
$builder->add('myField', 'number', array(
            'data' => !empty($defaultvalue) ? $options['data']->getMyField() : 0
        )) ;

4

그냥 문제를 이해합니다.

엔터티의 데이터를 기반으로 폼이 작성되는 방식을 조정하려고합니다. 엔티티가 작성되는 경우 일부 기본값을 사용하십시오. 엔티티가 존재하면 데이터베이스 값을 사용하십시오.

개인적으로 @MolecularMans의 솔루션은 갈 길이라고 생각합니다. 실제로 생성자 또는 속성 문에서 기본값을 설정합니다. 그러나 당신은 그 접근법을 좋아하지 않는 것 같습니다.

대신 다음을 수행 할 수 있습니다. http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

양식 유형에 리스너를 매달면 엔티티를 검사하고 새 엔티티 또는 기존 엔티티를 기반으로 빌더-> 추가 명령문을 조정할 수 있습니다. 청취자에서 기본값을 코딩 할 수는 있지만 여전히 기본값을 어딘가에 지정해야합니다. 또는 양식 유형으로 전달하십시오.

그래도 많은 일처럼 보입니다. 기본값이 이미 설정된 상태로 엔터티를 양식에 전달하는 것이 좋습니다.


4

FormBuildersymfony 2.7에서을 사용 하여 양식을 생성하는 경우 초기 데이터를 createFormBuilderControler 의 메소드로 전달할 수도 있습니다.

$values = array(
    'name' => "Bob"
);

$formBuilder = $this->createFormBuilder($values);
$formBuilder->add('name', 'text');

3

종종, 양식 i의 초기 기본값에는 조명기를 사용합니다. 이 방법은 가장 쉬운 방법은 아니지만 매우 편안합니다.

예:

class LoadSurgeonPlanData implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $surgeonPlan = new SurgeonPlan();

        $surgeonPlan->setName('Free trial');
        $surgeonPlan->setPrice(0);
        $surgeonPlan->setDelayWorkHours(0);
        $surgeonPlan->setSlug('free');

        $manager->persist($surgeonPlan);
        $manager->flush();        
    }   
}

그러나 심포니 유형 필드에는 data 옵션이 있습니다 .

$builder->add('token', 'hidden', array(
    'data' => 'abcdef',
));

3

매우 간단한 방법이 있습니다. 다음과 같이 기본값을 설정할 수 있습니다.

$defaults = array('sortby' => $sortby,'category' => $category,'page' => 1);

$form = $this->formfactory->createBuilder('form', $defaults)
->add('sortby','choice')
->add('category','choice')
->add('page','hidden')
->getForm();

3

작성 양식에서 '데이터'를 설정하면 엔티티를 편집 할 때이 값이 수정되지 않습니다.

내 해결책은 다음과 같습니다

public function buildForm(FormBuilderInterface $builder, array $options) {
    // In my example, data is an associated array
    $data = $builder->getData();

    $builder->add('myfield', 'text', array(
     'label' => 'Field',
     'data' => array_key_exits('myfield', $data) ? $data['myfield'] : 'Default value',
    ));
}

안녕.


허용되는 답변보다 훨씬 더 도움이됩니다! PHP7 +를 사용한다면 다음과 같이 깔끔하게 만들 수 있습니다.'data' => $data['myfield'] ?? 'Default value',
Boykodev

array_key_exists () 함수에 오타가 있음
Deadpool

1

해당 엔티티를 구성하여 기본값을 설정합니다. 양식에 엔티티를 바인딩하기 전에 색상 필드를 "# 0000FF"로 설정하십시오.

// controller action
$project = new Project();
$project->setColor('#0000FF');
$form = $this->createForm(new ProjectType(), $project);

이 접근법은 효과가 있지만 폼 클래스를 사용할 때마다 수행해야한다는 단점이 있으며 매우 장황합니다 (많은 set 문). 폼 구성 요소는 매우 우아하므로 다른 것이 있어야합니다. 그러나 어쨌든 감사합니다 :-)
herrjeh42

내 의견으로는 객체가 새로운 것이거나 가져올 때마다 값을 설정하는 것은 컨트롤러의 책임입니다. 이렇게하면 사용자가 관리자 나 수퍼 매니저 역할을 가지고 있기 때문에 새 색상이 변경 될 수 있으며, 비즈니스 로직이므로 컨트롤러 또는 서비스가 아닌 양식. Cerad가 언급 했듯이이 솔루션도 선호합니다. 항상 기본값을 설정하는 서비스를 작성하고 컨트롤러에서 DRY를 유지하면서 해당 서비스를 사용할 수 있습니다.
saamorim

이것이 내가 생각한 논리에 맞기 때문에 내가 선택한 솔루션입니다. 생성 된 컨트롤러에는 EDIT 및 CREATE 양식을 작성하는 방법이 다르며 새 엔티티에 대한 기본 / 초기 데이터를 설정하는 곳입니다.
alumi

1

해당 필드가 엔터티에 바인딩 된 경우 (해당 엔터티의 속성) 기본값을 설정할 수 있습니다.

예를 들면 :

public function getMyField() {
    if (is_null($this->MyField)) {
        $this->setMyField('my default value');
    }
    return $this->MyField;
}

1

나는 일반적으로 엔티티의 특정 필드에 대한 기본값을 설정합니다.

/**
 * @var int
 * @ORM\Column(type="integer", nullable=true)
 */
protected $development_time = 0;

이것은 새로운 레코드 또는 기존 레코드를 업데이트하는 경우 작동합니다.


'empty_data'콜백이 엔티티에서 생성자 매개 변수를 허용하는 데 사용될 때 작동하지 않는 것 같습니다 .
NDM

1

브라이언은 물었다 :

empty_data는 값없이 제출 될 때 필드를 1로만 설정하는 것으로 나타납니다. 값이 없을 때 입력에 양식이 기본값으로 1을 표시하도록하려는 경우는 어떻습니까?

당신은 기본값을 설정할 수 있습니다 empty_value

$builder->add('myField', 'number', ['empty_value' => 'Default value'])

0

나는 추가하여이 문제를 해결 값을ATTR :

->add('projectDeliveringInDays', null, [
    'attr' => [
          'min'=>'1',
          'value'=>'1'
          ]
     ])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.