Шаблон медиа-комплекта Sonata в Symfony 4 - PullRequest
0 голосов
/ 29 июня 2018

Я установил Sonata Media Bundle в Symfony 4, и все правильно, но что-то не так в отношении Symfony 3.

Я не вижу службу в Sonata Admin, и когда я добавляю поле медиа-комплекта sonata в класс администратора, появляется другой шаблон.

Вот изображения:

Шаблон Sonata Media Bundle - Symfony 4, в User Entity

Шаблон Sonata Media Bundle - Symfony 3, в пользовательской сущности

Шаблон Sonata Media Bundle - Symfony 3, Добавление нового изображения

Как вы видите, шаблон не работает в Symfony 4 или я что-то упустил в своем коде.

My Sonata Media config

sonata_media.yaml

    sonata_media:
            class:
                media: App\Application\Sonata\MediaBundle\Entity\Media
                gallery: App\Application\Sonata\MediaBundle\Entity\Gallery
                gallery_has_media: App\Application\Sonata\MediaBundle\Entity\GalleryHasMedia
            default_context: default
            contexts:
                default:
                    providers:
                        - sonata.media.provider.dailymotion
                        - sonata.media.provider.youtube
                        - sonata.media.provider.image
                        - sonata.media.provider.file
                        - sonata.media.provider.vimeo

                    formats:
                        small: { width: 100 , quality: 70}
                        big:   { width: 500 , quality: 70}

            cdn:
                server:
                    path: /upload/media

            filesystem:
                local:
                    # Directory for uploads should be writable
                    directory: "%kernel.project_dir%/public/upload/media"
                    create: false


            providers:
                # ...
                file:
                    # the resizer must be set to false, otherwhise this can delete icon files from the fs
                    resizer:    false
                image:
                   thumbnail: sonata.media.thumbnail.format          # default value
        #           thumbnail: sonata.media.thumbnail.consumer.format # can be used to dispatch the resize action to async task
        #            thumbnail: sonata.media.thumbnail.liip_imagine    # use the LiipImagineBundle to resize the image
                vimeo:
                    thumbnail: sonata.media.thumbnail.format          # default value
        #           thumbnail: sonata.media.thumbnail.consumer.format # can be used to dispatch the resize action to async task
        #           thumbnail: sonata.media.thumbnail.liip_imagine    # use the LiipImagineBundle to resize the image
                youtube:
                    thumbnail: sonata.media.thumbnail.format          # default value
        #           thumbnail: sonata.media.thumbnail.consumer.format # can be used to dispatch the resize action to async task
        #           thumbnail: sonata.media.thumbnail.liip_imagine    # use the LiipImagineBundle to resize the image
                dailymotion:
                    thumbnail: sonata.media.thumbnail.format          # default value
        #           thumbnail: sonata.media.thumbnail.consumer.format # can be used to dispatch the resize action to async task
        #           thumbnail: sonata.media.thumbnail.liip_imagine    # use the LiipImagineBundle to resize the image

Класс пользователя моего пользователя

    // src/Admin/OgaUsersAdmin.php
    namespace App\Admin;

    use Sonata\AdminBundle\Admin\AbstractAdmin;
    use Sonata\AdminBundle\Datagrid\ListMapper;
    use Sonata\AdminBundle\Datagrid\DatagridMapper;
    use Sonata\AdminBundle\Form\FormMapper;
    use Sonata\MediaBundle\Form\Type\MediaType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;

    class OgaUsersAdmin extends AbstractAdmin
    {
        protected function configureFormFields(FormMapper $formMapper)
        {
            $formMapper->add('userFirstName', TextType::class)
                       ->add('userCollection', MediaType::class, array(
                             'provider' => 'sonata.media.provider.image',
                             'context'  => 'default'
                            ));

        }

        protected function configureDatagridFilters(DatagridMapper $datagridMapper)
        {
            $datagridMapper->add('userFirstName');
        }

        protected function configureListFields(ListMapper $listMapper)
        {
            $listMapper->addIdentifier('userFirstName');
        }
    }

Поле "Мои пользователи и набор медиа"

    namespace App\Entity;

    use Application\Sonata\MediaBundle\Entity\Media;
    use Doctrine\ORM\Mapping as ORM;

    /**
     * OgaUsers
     *
     * @ORM\Table(name="oga_users", indexes={@ORM\Index(name="memb_id_idx", columns={"memb_id"}), @ORM\Index(name="comp_id_idx", columns={"comp_id"}), @ORM\Index(name="u_ui_id_idx", columns={"user_collection"})})
     * @ORM\Entity
     */
    class OgaUsers
    {
        /**
         * @var int
         *
         * @ORM\Column(name="user_id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $userId;

        /**
         * @var Media
         *
         * @ORM\ManyToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media")
         * @ORM\JoinColumns({
         *     @ORM\JoinColumn(name="userCollection", referencedColumnName="id")
         * })
         */
       private $userCollection;

Геттер и сеттер

public function getUserCollection(): ?\App\Application\Sonata\MediaBundle\Entity\Media
{
    return $this->userCollection;
}

public function setUserCollection(?\App\Application\Sonata\MediaBundle\Entity\Media $userCollection): self
{
    $this->userCollection = $userCollection;

    return $this;
}

Спасибо в

1 Ответ

0 голосов
/ 13 июля 2018

После поиска в течение нескольких недель.

У меня есть ответ.

Сначала мне нужно добавить эту строку в мой sonata_media.yaml, чтобы увидеть библиотеку мультимедиа в панели администратора.

db_driver: doctrine_orm # or doctrine_mongodb, doctrine_phpcr it is mandatory to choose one here

После входа в Admin в configureFormFields, просто нужно добавить ModellistType :: class , в поле мультимедиа.

class OgaUsersAdmin extends AbstractAdmin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper->add('userFirstname', TextType::class)
                   ->add('userImage', ModelListType::class);
    }

Надеюсь, это поможет !!

...