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)