生まれて初めて SonataAdminBundle を使用しましたが、いくつか問題があります。
Page
最初は、エンティティを持つ PageBundle がありましたAuthor
。次に、SonataAdminBundle の使用を開始し、 を使用してa の sを適切にsonata_type_model
表示しました。Author
Page
// ...
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
せることができません。
Page
PageBundle 内の関連するエンティティ コード:
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();
}
User
UserBundleのエンティティ:
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
.