EC-CUBE 3.1 開発進捗説明
その他機能改善・エンティティ拡張機構
alpha2で取り込まれた機能改善
alpha2では、デザインや拡張機構のほかにも、細かな機能改善が行われて
います。ここでは主要なものを解説します。
• #2199 初期データのCSVインポート
• #2231 URLからhtmlを削除
• #2234 path.ymlで絶対パスを使用しないように変更
• #2317 dotenvを使えるようにする
すべての変更は、以下のリリースノートを参照してください
https://github.com/EC-CUBE/ec-cube/releases/tag/3.1.0-alpha2
#2199 初期データのCSVインポート
3.0.xでは、初期データのインポートはマイグレーションファイルで行なっ
ていました。3.1から、CSVファイルでインポートを行うように変更されま
した。
• src/Eccube/Resouce/doctrine/import_csvに各テーブルのCSVファイル
を作成しています
• EC-CUBEインストール時に、このCSVファイルを元に初期データがイ
ンポートされます
#2199 初期データのCSVインポート
CSVファイルをインポートするDataFixtureは、単独で利用することも可能
です
• 指定したディレクトリ配下のCSVファイルをロードします
• CSVのファイル名=テーブル名となります
• CSVの投入順序を指定するdefitination.ymlがディレクトリ内に必要です
• PostgreSQLの場合シーケンスは自動で更新されます
#2199 初期データのCSVインポート
以下のように呼び出すことで、インストーラ以外からも利用可能です
<?php
$loader = new ¥Eccube¥Doctrine¥Common¥CsvDataFixtures¥Loader();
$loader->loadFromDirectory('/path/to/dir');
$Executor = new
¥Eccube¥Doctrine¥Common¥CsvDataFixtures¥Executor¥DbalExecutor($entityManager);
$fixtures = $loader->getFixtures();
$Executor->execute($fixtures);
#2231 URLからhtmlを削除
3.1では、DocumentRootの標準がhtmlディレクトリからルートディレクト
リに変更されます。
• 3.0.xでは、ルートディレクトリをDocumentRootに指定した場合、アク
セスするURLはhttp://xxx.example.com/html/ となってしまいました。
• htmlを削除する手順を提供していましたが、3.1からはこういった対応
も不要です
#2231 URLからhtmlを削除
phpのビルトインサーバで動かす場合は、htmlディレクトリの指定は不要で
す。
$ cd ec-cube
$ php -S localhost:8080 -t html/
#2234 path.ymlで絶対パスを使用しないように変更
3.1では、path.yml内のパスの記述が、相対パスに変更されます。
3.0.xでは、以下のように、絶対パスで生成されていました。
そのため、サーバ移行時や、開発環境から本番環境へ反映する際など、
path.ymlを書き換える必要がありましたが、3.1からはすべて相対パス化さ
れ、パスの差異を意識する必要がなくなります。
public_path_realdir: '/path/to/ec-cube/html'
image_save_realdir: '/path/to/ec-cube/html/upload/save_image'
image_temp_realdir: '/path/to/ec-cube/html/upload/temp_image'
user_data_realdir: '/path/to/ec-cube/html/user_data'
...
#2234 path.ymlで絶対パスを使用しないように変更
3.1では、%ROOT_DIR%という変数で生成され、configのロード時にルー
トディレクトリに展開されます。
public_path_realdir: '%ROOT_DIR%/html'
image_save_realdir: '%ROOT_DIR%/html/upload/save_image'
image_temp_realdir: '%ROOT_DIR%/html/upload/temp_image'
user_data_realdir: '%ROOT_DIR%/html/user_data'
...
#2317 dotenvを使えるようにする
環境変数を扱えるよう、Dotenv機能を利用することができます。
• Dotenvのライブラリは、symfony/dotenvを導入します。
• Heroku等のPaaS環境での構築が容易になることを見込んでいます。
• どの設定項目を環境変数化するかは、これから検討していきます。
エンティティの拡張機構
3.1-alpha2で、エンティティ(テーブル)の拡張機構が追加されました。
• #2267 エンティティ拡張機構の実装
• #2321 エンティティからフォームを生成する機構の追加
• #2268 エンティティからフォームを生成する機構の追加
Customerエンティティにカラムを追加する
• app/Acme/Entity/CustomerTrait.phpを作成
• @EntityExtensionアノテーションで拡張対象のエンティティを指定
• @ORM¥Columnなど、Doctrine標準のアノテーションを指定し、カラム追加などが可能
/**
* @EntityExtension("Eccube¥Entity¥Customer")
*/
trait CustomerTrait
{
/**
* @ORM¥Column(name="company_name_vn", type="string", length=255, nullable=true)
*/
public $company_name_vn;
}
Customerエンティティにカラムを追加する
• Proxyクラスを生成し、doctrineに認識させる(app/proxy/entityに出力される)
• 現状ではコマンドでの生成が必要ですが、自動生成の仕組みなど今後検討
$ php app/console generate-proxies
gen ->/path/to/ec-cube/app/proxy/entity/Customer.php
Customerエンティティにカラムを追加する
• doctrineコマンドで、DBへ反映
$ vendor/bin/doctrine orm:schema-tool:update --dump-sql --force
ALTER TABLE dtb_customer ADD company_name_vn VARCHAR(255) DEFAULT NULL;
Updating database schema...
Database schema updated successfully! "1" queries were executed
利用する際のコード例
• 拡張したカラムを利用する際、特に意識する内容はありません。
• 以下のようなコードで追加したカラムにアクセスすることができます。
public function index(Application $app, Request $request)
{
$Customer = $app['eccube.repository.customer']->find(1);
dump($Customer->company_name_vn);
$Customer->company_name_vn = " LOCKON VIETNAM CO.,LTD.";
$app['orm.em']->persist($Customer);
$app['orm.em']->flush();
...
フォームの自動生成
• 追加したカラムは、フォームの自動生成を行うことも可能です
• 設定は、eccube_form_optionsで指定します
• auto_render:true時、自動生成を有効にする(デフォルトはfalse)
• form_theme:出力時に使用するform_theme(デフォルトはnull)
• バリデーションはSymfonyのバリデーションを使用可能です
• http://symfony.com/doc/current/validation.html
フォームの自動生成
/**
* @EntityExtension("Eccube¥Entity¥Customer")
*/
trait CustomerTrait
{
/**
* @ORM¥Column(
* name="company_name_vn",
* type="string",
* length=255,
* nullable=true,
* options={
* "eccube_form_options": {
* "auto_render": true,
* "form_theme": "Form/company_name_vn.twig"
* }
* })
* @Assert¥NotBlank(message="入力してくださいね!!!"
*/
public $company_name_vn;
}
フォームの自動生成
thanks.

201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 04_機能改善