Edited at

【EC-CUBE】プラグインでDBの値をtwigに渡す方法

More than 1 year has passed since last update.

こちらのサンプルプラグインを拡張して購入手続き画面に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 が呼ばれたタイミングで実行される