Laravelと比較しながらEC-cube2を読み解くメモ。
アクションコントローラとURLの関係
修正対象のurlからコントローラを探すには
例えばURLが
http://example.local.com/admin/order/edit.php?
の場合だと
LC_Page_Admin_Order_Edit_EX.php
になる。
Laravelのようにアクションごとにメソッドは分かれておらず、一旦全部actionメソッドに集約されたあと、
actionメソッド内で一覧表示・新規作成・編集・検索・削除 などのモードを振り分けている。
ここに記述がない場合は継承元を直接編集してしまっているので_EXのない方を修正する。(data/classディレクトリはLaravelのvendorディレクトリに相当するフレームワーク本体なので絶対に変更してはいけないが、そんな綺麗な状態で残っている案件の方がレアケースだと思われる。)
HTMLテンプレートの探し方
上記コントローラの
init関数で $this->tpl_mainpage とか書いてあるあたりでSmartyテンプレートを指定している場合が多い。
(laravel の return viewの引数相当)
ただし処理の途中で書き換えているパターンもある。
マスターデータの取得方法
mtb_ プレフィックスを持つマスタテーブルのデータを取得する場合、以下のようにしてまるっと取得できる。
EloquentのようなORMはなく、DBのデータは全部配列で取得することになる。
$masterData = new SC_DB_MasterData_Ex();
$this->arrPref = $masterData->getMasterData('mtb_pref');
入力フォームのセット
入力フォームの値を出し入れするには
SC_Form_XXX_Ex クラスを使用する。
このFormクラスの中でHTMlのinputタグとのバインドやバリデーションルールを設定する。
例
$this->addParam('メモ', 'memo', STEXT_LEN, 'aKV', array('NO_SPTAB', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
このクラスのインスタンスにsetValue関数を使って値を流し込んでいく。
こんな感じ。
$objFormParam = new SC_FormOrderEditParam_Ex();
$objFormParam->setValue('order_id', $_REQUEST['order_id']);