LoginSignup
4
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-07-24

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

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5