EC-CUBE 3.0.16
MySQL 5.6.19
PHP 5.6.36
例として、商品名かな(name_kana)という項目を追加する場合。
1. テーブルへのカラム追加
dtb_productテーブルへ”name_kana”という名前のカラムをtextタイプ(またはvarchar)で追加。また、NULLを許可にする。
2. エンティティファイルに、セッターゲッター追加
/src/Eccube/Entity/Product.php
以下のように追記。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
/** * @var string */ private $name_kana; /** * @return string */ public function getNameKana() { return $this->name_kana; } /** * @param string $name_kana * @return \Eccube\Entity\Product */ public function setNameKana($nameKana) { $this->name_kana = $nameKana; return $this; } /************************************ ※メソッド名とその引数にアンダーバーを使うと エラーになるので、宣言した変数名にアンダーバー を含む場合は上記のように、アンダーバーを消して その次の文字を大文字(キャメルケース)にする。 ************************************/ |
3. データベース定義ファイルへカラム追加
/src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml
fields一覧にname_kanaの項目を追加。データベースとエンティティクラスを接続するのがdcm.yml(Doctrineマッピングファイル)。これにより、Productエンティティのname_kanaとdtb_productのname_kanaカラムが接続される。
|
name_kana: type: text nullable: true |
ちなみに、EC-CUBE3が採用しているSymfonyの標準ORM、Doctorineで設定できるフィールドタイプは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
const TARRAY = 'array'; const SIMPLE_ARRAY = 'simple_array'; const JSON_ARRAY = 'json_array'; const BIGINT = 'bigint'; const BOOLEAN = 'boolean'; const DATETIME = 'datetime'; const DATETIMETZ = 'datetimetz'; const DATE = 'date'; const TIME = 'time'; const DECIMAL = 'decimal'; const INTEGER = 'integer'; const OBJECT = 'object'; const SMALLINT = 'smallint'; const STRING = 'string'; const TEXT = 'text'; const BINARY = 'binary'; const BLOB = 'blob'; const FLOAT = 'float'; const GUID = 'guid'; |
4. フォーム定義ファイルへの項目追加
/src/Eccube/Form/Type/Admin/ProductType.php
下記のように、管理画面の商品登録フォームへ定義を追加。
|
$builder->add('name_kana', 'text', array( 'label' => '商品名かな', 'required' => true, )); |
上記の書き方で入力必須とならない場合(未入力で保存した際にエラーとならない)場合は、下記のようにする。
|
$builder->add('name_kana', 'text', array( 'label' => '商品名かな', 'required' => true, 'constraints' => array( new Assert\NotBlank(), ), )); |
なお、フォームの入力形式として整数型としたい場合は、第2引数に”integer”, 浮動小数点型としたい場合は、第2引数に”number”を指定するなどして対応。
このほかにも選択型(choice型)も指定できる。詳細は公式ドキュメントを参照。
5. 管理画面(商品情報登録画面)へフォーム表示
/app/template/admin/Product/product.twig
フォームを表示したい場所に下記のように記述。
|
{{ form_row(form.name_kana) }} |
form_rowは、form_label、form_widget、form_errorsを同時に出力する関数。テキストの入力幅を小さくしたい場合などは、form_label、form_widget、form_errorsに分割するなどしてCSSで対応。
|
<!-- 入力幅を小さく --> <div id="" class="form-group"> {{ form_label(form.name_kana) }} <!-- col-sm-* col-lg-* の「*」値で調整すると簡単 --> <div class="col-sm-2 col-lg-2"> {{ form_widget(form.name_kana) }} {{ form_errors(form.name_kana) }} </div> </div> |
6. 商品詳細ページへの表示
/app/template/default/Product/detail.twig
フロント側で出力。好きな場所に下記のように記載。未登録であれば何も出力されない。
以上。
参考URL)