前々回はプラグインによるデータベースの定義を行いました。
※ゆっくり進めているうちにEC-CUBE本体のバージョンアップが間に挟まりました(笑)
今回はデータベースへのフォームからの更新を行いたいと思います。
データベースへの入出力は基本的な部分です。
必要としないプラグインも多いとは思いますが、規模が大きければ必須な処理です。
しっかりと進めて行きたいと思います。
・
・
・
出来ました。
ファイル自体は前回の内容を流用する形です。
ファイル数も多くなってきているため前回の内容に変更を加えたファイルのみです。
■プラグインファイル(差分)
config.yml
event.yml
PluginManager.php
NakwebTest006Event.php
▼config.yml
name: データベース関連確認のプラグイン code: NakwebTest006 version: 0.0.1 event: NakwebTest006Event service: - NakwebTest006ServiceProvider orm.path: - /Resource/doctrine
イベント処理に関する行を追加しています。
ここに記載したイベントファイルを実行する形です。
▼event.yml
admin.setting.shop.shop.index.initialize: - [onAdminHomeInit, NORMAL] admin.setting.shop.shop.index.complete: - [onAdminHomeEditComplete, NORMAL]
HookPoints に従って実行するためのイベントを記載します。
HookPoints に関して一覧がもう少し分かりやすとといいのですが、以下のファイルを参考に探ました。
/src/Eccube/Event/EccubeEvents.php
※実際の処理を行う Controller ファイルの中から「dispatch」を行っている個所を目安に探しています。
▼PluginManager.php
<?php /** * This file is part of EC-CUBE */ namespace Plugin\NakwebTest006; use Eccube\Plugin\AbstractPluginManager; class PluginManager extends AbstractPluginManager { public function install($config, $app) { // データベース作成 $this->migrationSchema( $app, __DIR__ . '/Migration', $config['code'] ); } public function uninstall($config, $app) { // データベース削除 $this->migrationSchema( $app, __DIR__ . '/Migration', $config['code'], 0 ); } public function enable($config, $app) { } public function disable($config, $app) { } public function update($config, $app) { } }
ここのファイルは省いても良かったのですが、前回追加してログ出力の機能を削除しています。
▼NakwebTest006Event.php
<?php namespace Plugin\NakwebTest006; use Eccube\Application; use Eccube\Common\Constant; use Eccube\Entity\Category; use Eccube\Event\EventArgs; use Eccube\Event\TemplateEvent; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; class NakwebTest006Event { private $app; public function __construct($app) { $this->app = $app; } // 入力画面作成 public function onAdminHomeInit(EventArgs $event) { // フォーム作成 $builder = $event->getArgument('builder'); // フォームの項目追加 $builder ->add( 'plg_nakweb_test006_name', 'text', array( 'required' => false, 'label' => 'サンプルタイトル', 'mapped' => false, 'attr' => array( 'placeholder' => '', ), ) ) ->add( 'plg_nakweb_test006_data', 'text', array( 'required' => false, 'label' => 'サンプル内容', 'mapped' => false, 'attr' => array( 'placeholder' => '', ), ) ); } // 入力画面更新処理 public function onAdminHomeEditComplete(EventArgs $event) { $app = $this->app; $form = $event->getArgument('form'); // オブジェクト作成 $inputData = new \Plugin\NakwebTest006\Entity\NakwebTest006(); // エンティティを更新 $inputData->setName( $form[ 'plg_nakweb_test006_name' ]->getData() ); $inputData->setData( $form[ 'plg_nakweb_test006_data' ]->getData() ); // DB更新 $app['orm.em']->persist( $inputData ); $app['orm.em']->flush( $inputData ); } }
今回のメインとなる部分です。
「event.yml」に記載した HookPoints に合わせて処理を記載しています。
今回はフォームの項目追加ということで以下の項目を追加しています。
「管理画面 > 設定 > 基本情報設定 > ショップマスター > 基本情報編集」に2項目追加した形です。
注意する点として、項目を追加する場合な項目名を「plg_」から始めないと画面に表示されませんでした。
「plg_」が無くても動くと思うのですが、「おまじない」として「plg_」を追加するようにしています。
登録処理に関しては基本的に前々回のログ情報登録処理と基本は同じ出すが、入力内容は今回追加したフォームの内容を使用する形です。
なお、今のところは新規登録のみで過去の情報読み出しは機能していません
データベースを直接参照して更新状態を確認しています(笑)
そのうち行う事になると思いますがちょっとお待ちください。
と、云う形にてフォーム項目の追加とフォーム入力からのデータベース更新が可能となりました。
新規ページや既存ページにフォームを追加する方法はまだ確認できていませんが、道のりは険しそうです。
まぁ、少しずつとは云え進んでいるのであれば良いのかなとも思います。
焦っても仕方ないので地道に進めて行きたいと思います。
ということで今回はここまでです。