Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
70 lines (49 sloc) 2.45 KB
title keywords tags sidebar permalink
フォーム
plugin
plugin
home_sidebar
plugin_bp_form

プラグインではフォームとしての扱い方は2種類存在しており、

  • 既存のフォームに対しての拡張
  • 新規フォームの作成

となります。新規フォームの作成についてはフォームを表示してみようを参照してください。

既存のフォームに対しての拡張

EC-CUBE3.0.8まではFormExtensionというイベントを使ってFormに対して拡張を行えましたが、
3.0.9からは新たなイベントが用意されたため、そのイベントでフォームの拡張を行います。

/* admin.product.edit.initialize */
public function onAdminProductEditInitialize(EventArgs $event)
{
    $builder = $event->getArgument('builder');
    $builder->add('nickname', 'text', array(
        'label' => 'テスト項目',
        'mapped' => false,
    ));
}

$builder->add('nickname' 'text', array(nickname部分にplg_とつけて定義するとテンプレートを拡張することなく画面にフォーム項目が表示されるようになります。
詳しくはフォームの追加と拡張フォームの追加と拡張を参照してください。

フォームの入力チェックについて

イベントを使ってフォームの拡張を行うと、POST時のフォームチェックはEC-CUBE本体側にある

if ($form->isSubmitted() && $form->isValid()) {

という処理で行われるようになります。そのため、プラグイン側での検証は不要になります。

拡張したフォームのDB保存処理

フォーム要素を追加したのであれば、POST時にDBに保存などの処理を行うことがよくあります。
その場合、completeイベントにて処理を行いフォームで入力された値を処理する必要があります。

/* admin.product.edit.complete */
public function onAdminProductEditComplete(EventArgs  $event)
{
    $form = $event->getArgument('form');

    $nickname = $form->get('nickname')->getData();

    $Profile = $this->app['xxxx.profile']->find(zzz);

    $Profile->setNickname($nickname);

    $this->app['orm.em']->persist($Profile);
    $this->app['orm.em']->flush($Profile);
}

プラグイン側でDBの登録/更新処理を行うことでフォームに拡張した項目が登録できます。