7

生まれて初めて SonataAdminBundle を使用しましたが、いくつか問題があります。

Page最初は、エンティティを持つ PageBundle がありましたAuthor。次に、SonataAdminBundle の使用を開始し、 を使用してa の sを適切にsonata_type_model表示しました。AuthorPage

// ...

protected function configureFormFields(FormMapper $mapper)
{
    $mapper
        ->add('title')
        ->add('slug', null, array('required' => false))
        ->add('published', null, array(
            'label'    => 'publish',
            'required' => false,
        ))
        ->add('author', 'sonata_type_model')
        ->add('content')
    ;
}

しかしその後、SonataUserBundle を発見しました。私はそれを使い始め、最終的に機能するようになったとき、PageBundleUser のエンティティではなく、このエンティティを利用するのがいいと思いました。Authorこれを可能にするために、ドキュメントの 「抽象クラスおよびインターフェースとの関係を定義する方法」で説明されている手法を使用しました。

これは機能しましたが、SonataAdminBundle では機能しませんでした。sonata_type_modelは で動作しないよう で、動作さResolveTargetEntityListenerせることができません。

PagePageBundle 内の関連するエンティティ コード:

namespace Wj\PageBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Table
* @ORM\Entity
* @ORM\HasLifeCycleCallbacks
*/
class Page
{
    /**
    * @var integer $authorId
    *
    * @ORM\ManyToOne(targetEntity="Wj\PageBundle\Model\AuthorInterface")
    */
    private $author;
}

Wj\PageBundle\Model\AuthorInterface:_

namespace Wj\PageBundle\Model;

interface AuthorInterface
{
    public function getId();
}

UserUserBundleのエンティティ:

namespace Wj\UserBundle\Entity;

use Sonata\UserBundle\Entity\BaseUser;
use Wj\PageBundle\Model\AuthorInterface;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser implements AuthorInterface
{
    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    public function __toString()
    {
        return $this->getFirstName().' '.$this->getLastName();
    }
}

構成は私が上に投稿したFormMapperものと同じです。

ResolveTargetEntityListener テクニックを SonataAdminBundle と彼のsonata_type_model.

4

0 に答える 0