Symfony 4 中的奏鸣曲媒体包模板
Posted
技术标签:
【中文标题】Symfony 4 中的奏鸣曲媒体包模板【英文标题】:Sonata Media Bundle Template in Symfony 4 【发布时间】:2018-12-08 02:22:55 【问题描述】:我在 Symfony 4 中安装了 Sonata Media Bundle,一切正常,但 Symfony 3 的情况有所不同。
我在 Sonata Admin 中看不到该服务,当我将奏鸣曲媒体包字段添加到 Admin Class 时,这会显示不同的模板。
这里的图片:
Sonata Media Bundle template - Symfony 4, in User Entity
Sonata Media Bundle template - Symfony 3, in User Entity
Sonata Media Bundle template - Symfony 3, Adding new image
如您所见,该模板在 Symfony 4 中不起作用,或者我的代码中缺少某些内容。
我的奏鸣曲媒体配置
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;
谢谢
【问题讨论】:
欢迎来到 SO。该站点针对的是编程问题,而不是软件安装。您可能在 linux 或服务器管理站点上有更好的运气。此外,您还希望避免放置图片链接,如果这些链接在某些时候被删除,问题对于有同样问题的人来说将变得毫无用处。 感谢您的评论,这不是为了安装,是指php框架,以及插件/捆绑包的配置。我会尝试在没有图片链接的情况下进行解释。 但是你甚至没有给我们展示一些代码,所以来自@Nic3500 的反对是合法的。你试过相应的教程吗? 对不起,我已经添加了代码,是的,我已经尝试了相应的教程,一切正常但模板不符合预期,感谢反馈。 【参考方案1】:搜索了几个星期。
我有答案。
首先我需要将此行添加到我的 sonata_media.yaml 中,以便在 Admin Dashboard 中查看媒体库。
db_driver: doctrine_orm # or doctrine_mongodb, doctrine_phpcr it is mandatory to choose one here
在configureFormFields的Admin中后,只需将ModellistType::class,添加到媒体字段中。
class OgaUsersAdmin extends AbstractAdmin
protected function configureFormFields(FormMapper $formMapper)
$formMapper->add('userFirstname', TextType::class)
->add('userImage', ModelListType::class);
希望对你有帮助!!
【讨论】:
以上是关于Symfony 4 中的奏鸣曲媒体包模板的主要内容,如果未能解决你的问题,请参考以下文章