2015-04-14 3 views
0

В моем проекте Symfony2.6.6 у меня есть объект category. Я не знаю, как сказать, что правильно, но использовать расширение доктрины дерева, чтобы создать дерево с category объект как:Symfony Form настроить массив для типа объекта

  • Категория 1
    • Ребенок Категория 1
    • Ребенок Категория 2
  • Категория 2
    • Ребенок Категория 3 ...

Теперь при создании типа формы для создания новой категории я хочу настроить массив поля parent.

Код я использую

$builder->add('parent', 'entity', array('class' => 'AcmeBlogBundle:Category', 'property' => 'title')); 

генерирует только массив со всеми названием, как и ожидалось. Но я хочу, чтобы значения массива добавляли «-» для каждого уровня дерева. Например, категория 1 будет «Категория 1», а «Детская категория 1» - «Детская категория 1». Как я могу это сделать?

Извините, если это было задано раньше, я не знаю, как его искать.

ответ

1

Хорошо, допустим, у вас есть свойство getLevel(), которое вернет уровень вашего текущего предмета. Затем в файле сущности вашей категории создайте простой метод, например getIndentedTitle thar вернет вашу предварительно определенную категорию на основе ее уровня.

public function getIndentedTitle() { 
    return sprintf(
     '%s %s', 
     str_repeat('-', $this->getLevel()), 
     $this->getTitle() 
    ); 
} 

В следующем коде будет добавлено столько символов «-», что и текущий уровень текущей категории, и добавит его название рядом с ним.

Затем в форме строителя, вы должны указать, использовать этот метод:

$builder->add('parent', 'entity', array('class' => 'AcmeBlogBundle:Category', 'property' => 'indentedTitle')); 

Более подробную информацию о str_repeat.

Надеются, что вы получили эту идею.

+0

Ничего себе, это было действительно просто. Большое спасибо! – Kable