Validatorの拡張
拡張アプリでのValidatorの拡張の仕方を見ていきます。名前空間・クラス名に気をつけましょう。
ファイル名は任意ですが、わかりやすくする為、Validator.php とします。
例: extension/plugins/SamplePlugin/Validator.php
<?php
namespace Acms\Plugins\SamplePlugin;
class Validator
{
/**
* sample
* バリデーターのサンプルメソッド
*
* @param string $val - その変数の値
* @param string $arg - <input type="hidden" name="var:v#sample" value="ここの値">
* @return boolean - 入力が正しい場合は "true" そうでない場合は "false" を返す
*/
function sample($val, $arg)
{
/**
* 例:
* <input type="text" name="var" value="{var}">
* <input type="hidden" name="field[]" value="var">
* <input type="hidden" name="var:v#sample" value="cms">
*
* <!-- BEGIN var:validator#sample -->
* <p class="acms-admin-text-error">cmsという文字列を含めてください。</p>
* <!-- END var:validator#sample -->
*
* {var}の中は,'a-blogcms' とする
*/
// name="var:v#sample" value="cms" で指定した
// 文字列が含まれていなかったらエラーを出す
return (strpos($val, $arg) !== false);
}
}ServiceProviderの設定
これだけでは、通常の拡張方法と違い動作しません。動作させるためには、このクラスのオブジェクトをa-blog cmsに登録する必要があります。
ServiceProviderでValidator実装クラスを登録する
拡張アプリの基本で作成した ServiceProviderに少し手を加えます。
<?php
namespace Acms\Plugins\SamplePlugin;
use ACMS_App;
use Acms\Services\Common\ValidatorFactory;
class ServiceProvider extends ACMS_App
{
/* 省略... */
/**
* サービスの初期処理
*/
public function init()
{
$validator = ValidatorFactory::singleton();
$validator->attach('SampleValidator', new Validator);
}
/* 省略... */
}ポイント
Acms\Services\Common\ValidatorFactory のオブジェクトを
ValidatorFactory::singleton();
で取得して 先ほど作成した Acms\Plugins\SamplePlugin\Validator を attach します。
- 第一引数: 被らないような任意の文字列
- 第2引数: 実装クラスのオブジェクト
これで拡張アプリをインストールすれば、Validator.php で実装したValidatorが利用できるようになります。