2012-12-08 3 views
0

블로그 기사를 편집 할 수있는 양식이 있습니다.symfony2는 맞춤 필드를 만듭니다.

나는 특히 태그을 편집 할 수 있어야합니다. 그들은 내 Blog 엔티티에 ArrayCollection으로 저장됩니다. (ManyToMany cascade : persist, remove)

이제 Simfony는 <select> 태그를 사용하여이 유형의 데이터를 처리하지만 잘 작동하지만 잘 제거되고 태그를 추가 할 수 있기를 원합니다.

이 또한 가능하며 아주 잘 요리 책 문서에서 설명 : How to Embed a Collection of Forms

그러나,이 튜토리얼의 결과는 여전히 매우 우아하지 않고 I에 유래 태그 상자와 유사한 입력 상자를 가지고 싶어요.

무료 라이선스로 이미 많은 해결책이 있기 때문에 그 중 하나만 사용하기로했습니다. 예를 들어 jQuery Tags Input입니다.

기본적으로 $ ('# tags_input_box')를 실행하면됩니다. tagsInput() 그러면 SO와 유사한 태그 상자로 변환됩니다.

일부 맞춤 입력을 내 양식에 바인딩하고 나머지 '정품'입력란과 함께 다시 제출하는 방법은 Symfony2에서 이해할 수있는 모양입니다.

누구든지 내게이 문서를 참조하거나이 문제에 대한 연구를 시작해야하는 시작 정보를 줄 수 있습니까?

답변

0

플러그인은 쉼표로 구분 된 문자열 값으로 보냅니다.

아마도 가장 쉬운 방법은 양식의 단일 입력으로 처리 한 다음 양식을 처리 할 때 분할하는 것입니다.

// Entity to hold it in string form. 
namespace Some\Entity; 

class TagStringEntity { 
    protected $tagString; 

    // getTagString and setTagString 
} 

// Custom form type. 
// Use this AbstractType in your form. 
namespace Some\Form; 

Symfony\Component\Form\AbstractType; 

class TagType extends AbstractType { 
    public buildForm(FormBuilder $builder, array $options) { 
     $builder->add('tagString'); // will default to text field. 
    } 
} 

// In Controller 
public function displayFormAction() { 
    // Join the tags into a single string. 
    $tagString = implode(',', $article->getTags()); // assuming it returns an array of strings. 

    $tagStringType = new TagStringType(); 
    $tagStringType->setTagString($tagString); 

    // build form, etc... 
} 

public function checkFormAction() { 
    // ... 
    if ($form->isValid()) { 
     // Get the tag string, split it, and manually create your separated tag objects to store. 
    } 
} 

아마도 jQuery 플러그인을 사용하여 가장 깨끗하고 간단한 방법 일 것입니다. 여러 항목을 여러 항목으로 또는 그 반대로 전환했기 때문에 약간의 작업이 수행되지만 너무 나쁘지는 않습니다.

+1

더 깨끗하게 만들려면 [DataTransformers] (http://symfony.com/doc/current/cookbook/form/data_transformers.html)를 사용할 수 있습니다. 분할/합류를 제외하고 같은 생각은 컨트롤러에서 숨겨져 있습니다 – meze

+0

고마워요, 옳은 길에 있어요! 나는 이것을 작동 시켰고 내일 웹상에서 이것을 찾을 수 없기 때문에 여기에 전체 코드를 올릴 것이다. 내 코드가 작동 한 이후 어딘가에 착각했는지 말해 주시고 고백 해 주시면 고맙겠습니다.하지만 조금 익숙하지 않은 것 같습니다. @meze DataTransformers는 놀랍습니다. Symfony2 요리 책의 해당 섹션을 열어서 두려웠지만 한 번 나는 그들이 전혀 개념을 이해하는 것이 어렵지 않다는 것을 깨달았습니다! 그 정보를 주셔서 감사합니다. –

+0

감사합니다 meze, 나는 DataTransformers 기능에 대해서도 몰랐습니다. 매일 새로운 것을 배우십시오. ;) – samanime

관련 문제