0

Sonata Media 엔티티에 속성을 추가하고 싶지만 작동시키지 못합니다. 나는 Sonata Media Bundle 2.3을 사용하고 있으며 매뉴얼에 따라 설치했다. 나는 또한 Sonata Easy Extends Bundle으로 그것을 확장했다.Sonata Media 엔티티에 속성 추가/확장

Application\Sonata\MediaBundle\Entity\Media에 속성을 추가하면 doctrine:generate:diff ('매핑 정보에 변경된 사항이 없습니다.')을 실행했을 때 속성이 선택되지 않습니다.

config.yml의 미디어 클래스를 재정의해도 차이가 없습니다.

<?php 

namespace Application\Sonata\MediaBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Sonata\MediaBundle\Entity\BaseMedia as BaseMedia; 

/** 
* @ORM\Entity 
*/ 
class Media extends BaseMedia 
{ 
    /** 
    * @var integer $id 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    protected $test; 

    /** 
    * @return mixed 
    */ 
    public function getTest() 
    { 
     return $this->test; 
    } 

    /** 
    * @param mixed $test 
    */ 
    public function setTest($test) 
    { 
     $this->test = $test; 
    } 

    /** 
    * Get id 
    * 
    * @return integer $id 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

그리고 config.yml에서

: 나는 부분은 주석 있음을 떠날 경우 다시

sonata_media: 
    class: 
     media: Application\Sonata\MediaBundle\Entity\Media 
     gallery: Application\Sonata\MediaBundle\Entity\Gallery 
     gallery_has_media: Application\Sonata\MediaBundle\Entity\GalleryHasMedia 

, 나는 같은 결과를 얻을 수

Application\Sonata\MediaBundle\Entity\Media.php의 코드입니다.

UPDATE : 그래서

// Application\Sonata\MediaBundle\Admin\MediaAdmin.php 
<?php 
namespace Sonata\MediaBundle\Admin; 

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Show\ShowMapper; 

class MediaAdmin extends Admin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('name', null, ['required' => false]) 
      ->add('enabled', null, ['required' => false]) 
      ->add('authorName', null, ['required' => false]) 
      ->add('cdnIsFlushable', null, ['required' => false]) 
      ->add('description', null, ['required' => false]) 
      ->add('copyright', null, ['required' => false]) 
      ->add('test', null, ['required' => false]) 
      ->add('binaryContent', 'file', ['required' => false]); 
    } 
} 

: 나는 속성을 추가하는 사용자 지정 마이그레이션을 만들 때 나는 MediaAdmin을 확장 할 때 이미지 편집 페이지에 갈 때,의 test 필드는 표시되지 않습니다 소나타가 확장 된 미디어 번들을 무시하고있는 것으로 보입니다 (이 경우는 Application\Sonata\MediaBundle\Entity\Media.php을 제거하면 오류가 발생하기 때문에 그렇지 않습니다).

<?php 

namespace Application\Sonata\MediaBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Sonata\MediaBundle\Entity\BaseMedia as BaseMedia; 

/** 
* @ORM\Table(name="media__media") 
* @ORM\Entity 
*/ 
class Media extends BaseMedia 

간단한 php app/console doctrine:schema:update --force을 결국 속임수를 썼는지 : 나는 Application/Sonata/MediaBundle/Resources/config/doctrine 폴더를 제거하고 다음과 같은 미디어의 실체에 주석을했다처럼

답변

1

글쎄, 그것은 보인다. 희망이 같은 문제가 발생하는 사람들을 위해 도움이됩니다.

1

나는 이미지의 다른 속성을 만들 필요가 있었지만 여기에는 기본 doctrine과 공급자를 사용하는 나의 해결책이있다. 나는 쉬운 확장을 사용했다.

당신이 media.phpcr.xml처럼 뭔가를 얻을 수있는 노드 <field name="url" type="string"/>을 사용할 수 있습니다, 주석없이 미디어에 속성을 추가하려면 주석을 사용하지 않고, 다음

<?xml version="1.0" encoding="utf-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
    <!-- 
     This file has been generated by the EasyExtends bundle (https://sonata-project.org/easy-extends) 

     References : 
      xsd     : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd 
      xml mapping   : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en 
      association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en 
    --> 
    <entity 
     name="Application\Sonata\MediaBundle\Entity\Media" 
     table="media__media" 
     > 

     <id name="id" type="integer" column="id"> 
      <generator strategy="AUTO"/> 
     </id> 
     <field name="url" type="string"/> 

    </entity> 
</doctrine-mapping> 

, 당신은 당신의 Media.php 확장에 추가해야합니다

<?php 

namespace Application\Sonata\MediaBundle\Entity; 

use Sonata\MediaBundle\Entity\BaseMedia as BaseMedia; 

/** 
* This file has been generated by the Sonata EasyExtends bundle. 
* 
* @link https://sonata-project.org/bundles/easy-extends 
* 
* References : 
* working with object : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/working-with-objects/en 
* 
* @author Christophe Ferreboeuf <[email protected]> 
*/ 
class Media extends BaseMedia 
{ 
    /** 
    * @var int $id 
    */ 
    protected $id; 

    /** 
    * Permits to link the image to a different location on the website 
    * @var string 
    */ 
    protected $url; 

    /** 
    * Get id 
    * 
    * @return int $id 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * 
    * @return string 
    */ 
    public function getUrl() { 
     return $this->url; 
    } 

    /** 
    * 
    * @param string $url 
    * @return \Application\Sonata\MediaBundle\Entity\Media 
    */ 
    public function setUrl($url) { 
     $this->url = $url; 
     return $this; 
    } 


} 

그리고 ORM media.orm.xml에 대한 선언 :

<?xml version="1.0" encoding="utf-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
    <!-- 
     This file has been generated by the EasyExtends bundle (https://sonata-project.org/easy-extends) 

     References : 
      xsd     : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd 
      xml mapping   : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en 
      association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en 
    --> 
    <entity 
     name="Application\Sonata\MediaBundle\Entity\Media" 
     table="media__media" 
     > 

     <id name="id" type="integer" column="id"> 
      <generator strategy="AUTO"/> 
     </id> 
     <field name="url" column="url" type="string" nullable="true" length="255"/> 

    </entity> 
</doctrine-mapping> 
,691 (나는 YML를 선호)

<?php 
namespace Application\Sonata\MediaBundle\Provider; 

use Sonata\MediaBundle\Provider\ImageProvider as BaseImageProvider; 
use Sonata\AdminBundle\Form\FormMapper; 
use Gaufrette\Filesystem; 
use Imagine\Image\ImagineInterface; 
use Sonata\CoreBundle\Model\Metadata; 
use Sonata\MediaBundle\CDN\CDNInterface; 
use Sonata\MediaBundle\Generator\GeneratorInterface; 
use Sonata\MediaBundle\Metadata\MetadataBuilderInterface; 
use Sonata\MediaBundle\Model\MediaInterface; 
use Sonata\MediaBundle\Thumbnail\ThumbnailInterface; 
use Symfony\Component\HttpFoundation\File\File; 
use Symfony\Component\HttpFoundation\File\UploadedFile; 
use Symfony\Component\Form\Form; 

/** 
* Overrides the default provider to add the url field in the admin form 
* 
* @author christophe Ferreboeuf <[email protected]> 
*/ 
class ImageProvider extends BaseImageProvider{ 

    /** 
    * 
    * @param FormMapper $formMapper 
    */ 
    public function buildCreateForm(FormMapper $formMapper) 
    { 
     $formMapper->add('binaryContent', array(), array('type' => 'string')); 
    } 

    /** 
    * 
    * @param FormMapper $formMapper 
    */ 
    public function buildEditForm(FormMapper $formMapper) 
    { 
     $formMapper->add('name'); 
     $formMapper->add('enabled'); 
     $formMapper->add('authorName'); 
     $formMapper->add('url'); 
     $formMapper->add('cdnIsFlushable'); 
     $formMapper->add('description'); 
     $formMapper->add('copyright'); 
     $formMapper->add(
      'binaryContent', 
      // NEXT_MAJOR: Remove ternary and keep 'Symfony\Component\Form\Extension\Core\Type\FileType' value 
      // (when requirement of Symfony is >= 2.8) 
      method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix') 
       ? 'Symfony\Component\Form\Extension\Core\Type\FileType' 
       : 'file', 
      array('required' => false) 
     ); 
    } 
} 

을 그리고 당신의 서비스에 선언 : 363,210

가에 의한 관리자의 문제를 전달하려면, 당신은 이미지의 제공을 재정의해야

sonata.media.provider.image: 
    class: Application\Sonata\MediaBundle\Provider\ImageProvider 
    arguments: 
     - sonata.media.provider.image 
     - @sonata.media.filesystem.local 
     - @sonata.media.cdn.server 
     - @sonata.media.generator.default 
     - @sonata.media.thumbnail.format 
     - [] 
     - [] 
     - @sonata.media.adapter.image.gd 
     - @sonata.media.metadata.proxy 
    tags: 
     - { name: sonata.media.provider } 
    calls: 
     - [ setTemplates, [ { helper_thumbnail: SonataMediaBundle:Provider:thumbnail.html.twig, helper_view: SonataMediaBundle:Provider:view_image.html.twig } ] ]