EC-CUBE4.0.0
選択肢を作成するために、Master エンティティを継承した EmptyhandedCard エンティティを作成しました。
作成した mtb_emptyhanded_card テーブルに選択肢として phpMyAdmin で次のレコードを挿入しました。
id=1
name=新郎自宅
sort_no=1
discriminator_type=emptyhanded_card
sender.twig ページを新規作成し、EmptyhandedCard フォームを表示したところ、フォーム自体は表示されたのですが、デフォルトである「選択してください」以外の選択肢が表示されませんでした。
どうすれば選択肢が表示されるようになるでしょうか?
なお、これ以外のテキスト入力や住所入力のフォームは問題なく表示・保存できています。
以下、カスタマイズソースの抜粋です。
app/Customize/Repository/Master/EmptyhandedCardRepository.php
<?php
namespace Customize\Repository\Master;
use Customize\Entity\Master\EmptyhandedCard;
use Eccube\Repository\AbstractRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
* EmptyhandedCardRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class EmptyhandedCardRepository extends AbstractRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, EmptyhandedCard::class);
}
}
app/Customize/Entity/Master/EmptyhandedCard.php
<?php
namespace Customize\Entity\Master;
use Doctrine\ORM\Mapping as ORM;
/**
* EmptyhandedCard
*
* @ORM\Table(name="mtb_emptyhanded_card")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
* @ORM\HasLifecycleCallbacks()
* @ORM\Entity(repositoryClass="Customize\Repository\Master\EmptyhandedCardRepository")
* @ORM\Cache(usage="NONSTRICT_READ_WRITE")
*/
class EmptyhandedCard extends \Eccube\Entity\Master\AbstractMasterEntity
{
}
app/Customize/Entity/Sender.php
<?php
namespace Customize\Entity;
if (!class_exists('\Customize\Entity\Sender')) {
/**
* Sender
*
* @ORM\Table(name="dtb_sender")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
* @ORM\HasLifecycleCallbacks()
* @ORM\Entity(repositoryClass="Customize\Repository\SenderRepository")
*/
class Sender extends AbstractEntity
{
/**
* @var \Customize\Entity\Master\EmptyhandedCard
*
* @ORM\ManyToOne(targetEntity="Customize\Entity\Master\EmptyhandedCard")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="emptyhanded_card_id", referencedColumnName="id", nullable=true)
* })
*/
private $EmptyhandedCard;
/**
* Set emptyhanded_card.
*
* @param \Customize\Entity\Master\EmptyhandedCard|null $emptyhanded_card
*
* @return Sender
*/
public function setEmptyhandedCard(\Customize\Entity\Master\EmptyhandedCard $emptyhanded_card = null)
{
$this->EmptyhandedCard = $emptyhanded_card;
return $this;
}
/**
* Get emptyhanded_card.
*
* @return \Customize\Entity\Master\EmptyhandedCard|null
*/
public function getEmptyhandedCard()
{
return $this->EmptyhandedCard;
}
}
}
app/Customize/Form/Type/Master/EmptyhandedCardType.php
<?php
namespace Customize\Form\Type\Master;
use Eccube\Form\Type\MasterType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Class EmptyhandedCardType
*/
class EmptyhandedCardType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'class' => 'Customize\Entity\Master\EmptyhandedCard',
'placeholder' => 'common.select',
]);
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'emptyhanded_card';
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return MasterType::class;
}
}
app/Customize/Form/Type/Front/SenderType.php
<?php
namespace Customize\Form\Type\Front;
use Customize\Form\Type\Master\EmptyhandedCardType;
class SenderType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('emptyhanded_card', EmptyhandedCardType::class, [
'required' => true,
'constraints' => [
new Assert\NotBlank(),
],
])
;
}
}
app/template/default/Mypage/sender.twig
<dl>
<dt>
{{ form_label(form.emptyhanded_card, '手ぶらカードのお届け先', { 'label_attr': { 'class': 'ec-label' }}) }}
</dt>
<dd>
<div class="ec-select{{ has_errors(form.emptyhanded_card) ? ' error' }}">
{{ form_widget(form.emptyhanded_card) }}
{{ form_errors(form.emptyhanded_card) }}
</div>
</dd>
</dl>
----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。