自作コンポーネントにデータアクセス機能を追加する
前回の記事では、Delphi for PHPのコンポーネントを開発する手順を見てきました。今回は、CSSChartコンポーネントをDatasourceに接続させることにより、もう少しスパイス(機能)を追加してみようと思います。
これにより、作成したコンポーネントは、DatasourceコンポーネントにアタッチしたあらゆるDatasetからの情報を表現できるようになります。そのような情報を読み込み、それに対するインターフェースを提供するDatasetであれば、データベースやメモリ配列やXMLファイルなどから情報を得られます。
VCL for PHPのデータベースアクセススキームの開発では、VCL for Windowsに見られるものと同様のロジックに従いました。ですから、Delphi for Windowsのユーザーであれば、それらのコンセプトにはなじみがあるでしょう。
前回の記事
プロパティの追加
コンポーネントが動作するには、3つのプロパティを追加する必要があります。
- Datasource…あらゆる情報の提供元に接続します
- LabelsColumn…チャートのラベルを格納しているデータソースにおけるカラム名
- ValuesColumn…チャートの値を格納しているデータソースにおけるカラム名
[編集|Publishedプロパティの追加]を利用して、以下のコードが得られます。
protected $_datasource = null; function getDatasource() { return $this->_datasource; } function setDatasource($value) { $this->_datasource = $value; } function defaultDatasource() { return null; } protected $_labelscolumn = ""; function getLabelsColumn() { return $this->_labelscolumn; } function setLabelsColumn($value) { $this->_labelscolumn = $value; } function defaultLabelsColumn() { return ""; } protected $_valuescolumn = ""; function getValuesColumn() { return $this->_valuescolumn; } function setValuesColumn($value) { $this->_valuescolumn = $value; } function defaultValuesColumn() { return ""; }
オブジェクトプロパティと解決(Fixing Up)
オブジェクトプロパティとは、あるコンポーネントへの参照を行うプロパティです。PHPには、(簡単に言えば)データ型はありません。そのため、すべてのプロパティはIDEによって文字列として処理され、.xml.phpのリソースファイルに文字列として格納されます。
オブジェクトになり得るプロパティを文字列からオブジェクトへと変換するには、プロパティが適切な値を保持するのを保証する「解決(Fixing Up)」と呼ばれる追加の手順が必要になります。
最初に行うのは、その機能のためにセッター(setter)を変更することです。
function setDatasource($value) {
$this->_datasource = $this->fixupProperty($value); }
これにより、常に$this->_datasourceが適切な時点で適切な値を保持するようになります。また、このプロパティに適切な値を設定するために、フォームがロードされた時にこのメソッドを呼び出す必要があります。これは、loaded()メソッドをオーバーライドすることで可能です。
function loaded()
{
parent::loaded();
$this->setDataSource($this->_datasource);
}
ここで、パッケージをアンインストール/インストールすると、新しいプロパティがオブジェクトインスペクタに表示され、DatasourceプロパティにあらゆるDatasourceコンポーネントをアタッチできます。このコンポーネントにプロパティを追加するのに、これ以上のことは必要ありません。