パラメーター

8.1 〜

WGParameters の利用パターン

<?php
class WGGIntAllowNULL extends WGGInt
{
	public function __construct( int $min = 0, int $max = PHP_INT_MAX )
	{
		parent::__construct( $min, $max );
		$this->invalid(new WGGThru());
	}
}

trait EXParaIdAllowNULL
{
	#[WGPara( name: 'id', gauntlet: new WGGIntAllowNULL(), default: null )]
	public ?int $id = null;
}

ガントレット WGGInt を拡張して、int 以外も許容するようにしています。Int以外の場合は、default値として null がセットされますが、エラーは発生しません。

<?php
require_once 'waggo.php';

class EXXMLBoxesBoxParams extends WGParameters
{
	use EXParaIdAllowNULL;
}

class EXXMLBoxesBox extends HKXMLController
{
	protected EXXMLBoxesBoxParams $p;
	protected function initFirst()
	{
		$this->p = ( new EXXMLBoxesBoxParams() )->by( WGParameters::METHOD_GET )->store( $this );
	}

	protected function init()
	{
		if ( ( $this->p = EXXMLBoxesBoxParams::restore( $this, WGParameters::METHOD_GET ) ) == null ||
			 $this->p->hasError() )
		{
			$this->abort();
		}
	}
}

もちろん、WGParameters は、trait を使わなくても記述できます。
trait を使うと、構築するアプリケーションの考え方にあわせて抽象化し、管理することができます。

初回アクセスの場合

initFirst の初回アクセスで、引き渡されたパラメータ(この場合は、GET による。)を読み込み、トランザクショナルセッションに保持します。

initFirst から連続して、init に入りますが、パラーメータを、トランザクショナルセッションから一時的に読み込みつつ、その内容が引き渡されたパラメータと一致する場合は、パラメータを復元します。

これ以降、ダーティだった情報がクリーン化され、$this->p->id へのアクセスが保証されます。

継続アクセスの場合

パラーメータを、トランザクショナルセッションから一時的に読み込みつつ、その内容が引き渡されたパラメータと一致する場合は、パラメータを復元します。

これ以降、ダーティだった情報がクリーン化され、$this->p->id へのアクセスが保証されます。