Avillions
@Avillions
PHP Developer at Genesis

Как в symfony2 в формах сделать images checkbox?

Добрый день, у меня в проекте на Symfony2, есть Entity Photo

И есть форма для добавления фоторгафий в альбом из уже существующих у пользователя. Мне бы хотелось что бы в форме возможные фотографии для добавления отображались не как dropdown, а как обычные фотографии <img src=""/>. И из превью уже можно было бы выбирать что добавлять в альбом. Можете подсказать вариант как это можно реализовать?

Гугл к сожелению внятного ничего не дал, на Symfony пишу впервые, так что простите если задаю глупый вопрос)

Код CreateAlbumType:

class CreateAlbumType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('date', 'datetime', [
                'widget' => 'single_text'
            ])
            ->add('text', 'textarea', [
                'attr' => [
                    'rows' => 5,
                    'style' => 'min-width: 300px;',
                ],
            ])
            ->add('photos', 'entity', array(
                'class' => 'Flugo\PhotosBundle\Entity\Photo',
                'label' => 'Photos',
                'multiple' => true,
            ))
        ;
    }
    
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Flugo\AlbumBundle\Entity\CreateAlbum'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'flugo_albumbundle_post';
    }
}


Отображение формы:

{% block body -%}
    <h1>Album creation</h1>

    {{ form(form) }}
{% endblock %}


И фотографии отображаются в selecte:
xAeNK4RsYggJKr.jpg

А мне хотелось бы наподобии такого:
a2Xa9wJsyDD0nA.jpg
  • Вопрос задан
  • 361 просмотр
Решения вопроса 1
Avillions
@Avillions Автор вопроса
PHP Developer at Genesis
Нашел решение проблемы сам. Все оказалось просто, нам нужно что бы EntityType отображался как CheckboxList. Для этого выставляет параметры multiple и expanded в true. Далее в лейбле чекбокса выводим html тег img с прописанным атрибутом scr. Сам чекбокс скрываем, а на картинки через js вешаем обработчики событий.

Вот что получилось:
p276BJXS0WWpWm.jpg

Вот код (я его вынес из формы в контроллер, что бы ограничить choices фотографиями пользователя):
$form->add('photos', 'entity', array(
            'class'    => 'Flugo\PhotosBundle\Entity\Photo',
            'multiple' => true,
            'expanded' => true,
            'choices'  => $user->getPhotos(),
            'attr'     => [
                'class' => 'photos-checkbox '
            ],
            'choice_label' => function($choice, $currentChoiceKey) {
                return sprintf('<img src="%s">',  $choice->getPhoto130());
            },
            'choice_attr' => ['class' => 'hidden'],
        ));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
StackOverflow
Вам надо переопределить виджет для поля photos
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы