3

私は今、数え切れないほどの時間、壁に頭をぶつけてきました。SOがお役に立てば幸いです。

私にはRetailer、Branch、RetailerBranchesのエンティティがあり、正常に機能しています。小売業者は多くの支店を持つことができ、支店は1つの小売業者しか持つことができません。Sonata Admin(SonataAdminBundle)をその関係でうまく機能させようとすると、難しい部分が発生します。最も単純な形式では、次のようになります。

小売業者エンティティ

    /**
     * @ORM\Column(name="ID", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * Relation
     * 
     * @ORM\OneToMany(targetEntity="RetailerBranches", mappedBy="Retailer", cascade={"persist"})
     */
    protected $branches;

    public function __construct() {
        $this->branches = new ArrayCollection();
    }

RetailerBranchesがテーブルに参加

    /**
     * @ORM\Column(name="ID", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @ORM\JoinColumn(name="Retailer_ID", referencedColumnName="ID", nullable=false)
     * @ORM\ManyToOne(targetEntity="Retailer", inversedBy="branches")
     */
    private $retailer;

    /**
     * @ORM\JoinColumn(name="Branch_ID", referencedColumnName="ID", nullable=false, unique=true)
     * @ORM\OneToOne(targetEntity="Branch", inversedBy="retailer")
     */
    private $branch;

ブランチエンティティ

    /**
     * @ORM\Column(name="ID", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * Relation
     * 
     * @ORM\OneToOne(targetEntity="RetailerBranches", mappedBy="branch", cascade={"persist"})
     */
    private $retailer;

その関係を形にするためにフォームを生成しようとすると、より難しい部分が発生します。

RetailerAdmin

protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->with('Branches')
                ->add('branches', 'sonata_type_collection', array(
                    'required' => false,
                    'by_reference' => false
                ), array(
                    'edit' => 'inline',
                    'inline' => 'table',
                ))
                ->end()
        ;
    }

RetailerBranchesAdmin

protected function configureFormFields(FormMapper $formMapper)
    {
        if ($this->hasRequest()) {
            $link_parameters = array('context' => $this->getRequest()->get('context'));
        } else {
            $link_parameters = array();
        }

        $formMapper
            ->add('succursale', 'sonata_type_model_list', array(
                'class' => 'VeloRetailerBundle:Branch',
                'required' => false,
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
            ))
        ;
    }

問題:

この種のすべての作品、ここにスクリーンショットがあります: ここに画像の説明を入力してください

小売業者とその支店があります。わーい。

問題1:下部にある[新規追加]ボタンは、明らかに機能しない単純なBranchオブジェクトの代わりにRetailerBranchesオブジェクトを追加しようとします。

問題2:この方法では、ユーザーがブランチをインラインで変更することもできません。

私は解決策に近づいているように感じますが、私はそこに完全に到達することはできません。どんな助けでも大歓迎です!

4

2 に答える 2

4

同じ問題が発生した場合は、GitHubにソリューションを投稿しました

于 2013-04-12T14:39:48.443 に答える
1

Sonata Adminの同じページでOneToOneまたは他の関係を編集する必要がある場合は、エンティティごとにAdminクラスを作成して(そしてconfig.ymlに追加して)、次のようにメインのAdminクラスのフォームにエンティティ全体を追加することもできます。

protected function configureFormFields(FormMapper $formMapper)
    $formMapper
    ->add('yourLinkedProperty', 'sonata_type_admin')
    //other form fields
    ->end()

SonataDochttp ://sonata-project.org/bundles/admin/master/doc/reference/form_types.htmlを参照してください

于 2014-03-17T21:38:03.180 に答える