WGFController 初回アクセスについて

初回アクセス時の発動イベント

protected function create()

URLに付帯するパラメータの解析や、利用するインスタンス変数などを初期化するために利用します。

protected function models() : []

コントローラー内で利用するモデル名またはモデルインスタンスを返すことで、コントローラー内でWGMModel を利用することができます。

WGMModel は、そもそも WGFController から独立しているO/Rマッパですが、コントローラーで利用するように宣言すると、WGFController の支援で、後述の view/connector 接続することが可能になります。

登録されたモデルは、$this->model(name) で、モデルインスタンスに直接アクセスすることが可能です。

コントローラーに登録されたモデルインスタンスは、コントローラー登録時に、自動的に setAutoTimestamp() メソッドが実行され、特殊なタイムスタンプフィールド(initymd, updymd)の処理が有効になります。これら特殊なタイムスタンプフィールドが存在しない場合は無視されます。

protected function models()
{
  return ['base', 'owner'];
}
protected function init()
{
  $this->model('base')->select();
}
protected function models()
{
  return ['base1' => 'base', 'base2' => 'base'];
}
protected function init()
{
  $this->model('base1')->select();
  $this->model('base2')->select();
}
protected function models()
{
  return [
    'owner' => new CustomizedWGMModelOwner(),
    'base'  => new CustomizedWGMModelBase()
  ];
}
protected function init()
{
  $this->model('owner')->select();
  $this->model('base')->select();
}

protected function views() : []

コントローラー内で利用するビューインスタンスの配列を返すことで、コントローラー内でWGV6Object を利用することができます。

登録されたビューは、$this->view(name) で、ビューのインスタンスにアクセスすることが可能です。

WGV6Object から継承されているビューで、そのビューインスタンスのメソッドである isSubmit() が true を返すインスタンスについては、その入力項目が存在する場合に _ (アンダースコア)付きのイベントが呼び出されます。

protected function views()
{
  return [
    'text'   => new WGV6BasicElement(),
    'submit' => new WGV6BasicSubmit()
  ];
}
protected function init()
{
  $this->view('text')->setValue('aaaaa');
}
protected function _submit()
{
  return false; // back to input() with FORMHTML
  return $this->defaultTemplate(); // template with SHOWHTML
}

テンプレート側では、以下のような形で記述することになります。

<input type="text" id="{@text:id}" name="{@text:name}" value="{@text:value}" data-error="{@text:error}">
<input type="submit" id="{@submit:id}" name="{@submit:name}" data-error="{@submit:error}">

protected function connectors() : []

models() で登録したモデルインスタンスと、views() で登録したビューインスタンスを紐付ける配列を返します。

配列の構成は以下のとおりです。

[
  "モデル名1" => ["モデル1内フィールド名" => "ビュー名", ...],
  "モデル名2" => ["モデル2内フィールド名" => "ビュー名", ...],
]

モデルフィールド名とビュー名が一致する場合は、以下の書き方もできます。

[
  "モデル名1" => ["一致したフィールドビュー名", "一致したフィールドビュー名", ...],
  "モデル名2" => ["一致したフィールドビュー名", "一致したフィールドビュー名", ...],
]

混在してもよいです。

[
  "モデル名1" => ["モデル1内フィールド名" => "ビュー名", "一致したフィールドビュー名", "一致したフィールドビュー名", ...],
]
protected function models()
{
  return ['base'];
}
protected function views()
{
  retuen ['name' => new WGV6BasicElement()];
}
protected function connectors()
{
  return ['base' => ['name']];
}
protected function models()
{
  return ['base'];
}
protected function views()
{
  retuen ['nameView' => new WGV6BasicElement()];
}
protected function connectors()
{
  return ['base' => ['name' => 'nameView']];
}
protected function models()
{
  return ['owner', 'base'];
}
protected function views()
{
  retuen [
     'ownerView' => new WGV6BasicElement(), 
     'nameView'  => new WGV6BasicElement()
  ];
}
protected function connectors()
{
  return [
    'base'  => ['name'  => 'nameView']];
    'owner' => ['usercd => 'ownerView']
  ];
}

protected function initFirst()

初回アクセス時のときだけ、発動するイベントです。

初期化されたトランザクショナルセッションは、この時点で用意されているので、ページ内で利用するセッションの初期化や、create() などで解析したパラーメータをもとに、入力項目の復元処理などに利用します。

protected function init()

毎回発動するイベントです。セッション状態の確認などをおこなう用途で利用します。

protected function input() : string | null

最終的にレンダリングすべき情報を、appCanvas、pageCanvas に展開する処理を行う用途で利用します。return で、レンダリングしたいテンプレートファイル名を返すことで、WGFController 側でそのテンプレートファイルに情報の展開処理を行うようになります。

WGFController に登録されているビューの展開は、FORMHTML モードで実施されます。

$this->defaultTemplate() は、自身のスクリプトが存在するディレクトリと同じ階層にあるテンプレートファイルを以下のルールに従って変更し、読み込むべきファイル名の文字列として返します。

自身のスクリプト: /home/example/wwwroot/pub/index.php
テンプレートファイル: /home/example/wwwroot/pub/_index.html


(注意:$this->defaultTemplate() は、簡単のため、自身のスクリプトが存在するディレクトリと同じ階層のファイル名を展開するため、同じ階層にテンプレートファイルを用意する必要があります。セキュリティ的によろしくないため、テンプレートファイルを不可視にする措置をおこなうか、defaultTemplate をオーバーライドし、不可視ディレクトリを見るよう実装することを推奨します。)

null を指定すると、レンダリングしないままとなります。

protected function input()
{
  $this->pageCanvas->html['name'] = 'なんとかかんとか';
  return $this->defaultTemplate();
}
protected function input()
{
  $this->pageCanvas->html['name'] = 'なんとかかんとか';
  return __DIR__ . '/_example.html';
}

protected function terminate()

主に後始末のロジックを記載します。