« 目次

Movable Type オブジェクト・リファレンス

MT::Callback

概要

$cb = new MT::Callback(name => <name>, code => sub { <callback code> });

<name>は人間が読解可能な文字列で、プラグイン名など、周囲のコードを識別するためのものです。ログを検証してエラーを特定するときに役立ちます。

メソッド

name

コールバックの登録名を返します。

invoke

MT::Callbackオブジェクトを第1引数とし、invokeメソッドに渡されたすべての引数を2番目以降の引数として、コールバックを実行します。

plugin

コールバック・オブジェクトに関連付けられたプラグイン要素を返します。

コールバック呼び出しの書式

各コールバック・ルーチンに渡されるパラメーターは、操作の種類によって変わります。詳細は次のとおりです。

load()
load_iter()

load()とload_iter()は、データベースから項目を読み込む前に、<class>::pre_loadとして登録されたコールバックを呼び出します。このため、コールバック作成者は、データベースからの読み込み前に引数を処理することができます。次は<class>::pre_loadの記述例です。

sub pre_load {
    my ($eh, $args) = @_;
    ...
}

load()または反復子から返される各オブジェクトは、返される前に、<class>::post_loadとして登録されているすべてのコールバックの処理を受けます。<class>::post_load関数の例は次のようなものです。

sub post_load {
    my ($eh, $args, $obj) = @_;
    ...
}

$argsはメソッドに渡されたすべてのパラメーターを格納した配列へのリファレンスです。

save()

次は、saveメソッドのコールバックの記述例です。

sub pre_save {
    my ($eh, $obj, $original) = @_;
    ...
}

sub post_save {
    my ($eh, $obj, $original) = @_;
    ...
}

pre_save関数で$objを変更することにより、データベースに格納されるデータを制御することができます。オブジェクトに対して正反対の操作を行うようなpre_save()およびpost_load()関数を作成することにより、メモリー上のデータを通常の状態に保ちながら、特別な形でデータベースにデータを保存することができます。

remove()

<class>::pre_remove()および<class>::post_remove()メソッドは、対象となる操作の一番最初と一番最後に呼び出されます。コールバック・ルーチンは次のようにして呼び出します。

sub pre_remove {
    my ($eh, $obj) = @_;
    ...
}

post_remove()メソッドの書式も同様です。<class>::pre_remove_all()および<class>::post_remove_all()メソッドは、対象となる操作の一番最初と一番最後に、MT::Callbackオブジェクト以外の引数なしで呼び出されます。

エラー処理

どのコールバック・ルーチンの場合も、第1引数はMT::Callbackオブジェクトです。このオブジェクトを使うことにより、エラーをMTに返すことができます。エラーの表示には、次のようにerror()を使うだけです。

sub my_callback {
    my ($eh, $arg2, $arg3) = @_;
    ...
    if (some_condition) {
        return $eh->error("The foofiddle was invalid.");
    } 
    ...
}

Copyright © 2001-2006 Six Apart, Ltd. All Rights Reserved.