こちらのサンプルプラグインを拡張して購入手続き画面にbase_infoのshop_nameを表示させてみます。
TemplateEventでパラメータをセットする方法
/app/Plugin/SamplePayment/SamplePaymentEvent.php
class SamplePaymentEvent implements EventSubscriberInterface
{
private $baseInfoRepository; // クラス変数を定義
// コンストラクタインジェクションでBaseInfoRepositoryを取得
public function __construct(BaseInfoRepository $baseInfoRepository)
{
$this->baseInfoRepository = $baseInfoRepository; // クラス変数にセット
}
public static function getSubscribedEvents()
{
return [
'@admin/Order/edit.twig' => 'onAdminOrderEditTwig',
'Shopping/index.twig' => 'onShoppingIndexTwig', // イベントを追加
];
}
// ...
public function onShoppingIndexTwig(TemplateEvent $event)
{
$BaseInfo = $this->baseInfoRepository->find(1);
$event->setParameter('BaseInfo', $BaseInfo); // パラメータに値をセット
}
}
上記で Shopping/index.twig' にて
BaseInfo` で参照可能になる。
独自ブロックで参照したい場合はスニペットで引数として渡してやる必要がある。
{# ... #}
{{ eccube_block_sample_payment_credit_form({ Order: Order, form: form, BaseInfo: BaseInfo}) }}
{# ... #}
これでブロック内で参照できる
/app/Plugin/SamplePayment/Resource/template/credit.twig
{% block sample_payment_credit_form %}
{# BaseInfoでセットした値が参照できる #}
{{ BaseInfo.shop_name }}
{# ... #}
{% endblock %}
Form/ExtensionのbuildView関数を使う方法
/app/Plugin/SamplePayment/Form/Extension/CreditCardExtention.php
class CreditCardExtention extends AbstractTypeExtension
{
// ...
private $baseInfoRepository; // クラス変数を定義
// コンストラクタインジェクションでBaseInfoRepositoryを取得
public function __construct(PaymentRepository $paymentRepository, BaseInfoRepository $baseInfoRepository)
{
$this->paymentRepository = $paymentRepository;
$this->baseInfoRepository = $baseInfoRepository; // クラス変数にセット
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// ...
}
// buildView関数を作成
public function buildView(FormView $view, FormInterface $form, array $options)
{
// 引数にFormViewが渡ってくるのでvarsに値をセット
$view->vars['BaseInfo'] = $this->baseInfoRepository->find(1);
parent::buildView($view, $form, $options);
}
// ...
}
/app/Plugin/SamplePayment/Resource/template/credit.twig
{% block sample_payment_credit_form %}
{# form.varsにセットした値が入っている #}
{{ form.vars.BaseInfo.shop_name }}
{# ... #}
{% endblock %}
補足
buildForm
: createBuilder
が呼ばれたタイミングで実行される
buildView
: createView
が呼ばれたタイミングで実行される