PHP5.2.4を使用しています。
Sabelフレームワーク内でのトランザクションの記述のサンプルというか例を
教えて頂きたいのですが、以前はHPが見れてそのサンプルを見れたような気がするのですが、
今はアクセスできる状態じゃなく(http://www.sabel.jp/)コミュニティのようなものもあるわけではないので
ここで質問させて下さい。
app/logics/aspects/Transaction.php
class Logics_Aspects_Transaction implements Sabel_Aspect_MethodInterceptor
{
public function invoke(Sabel_Aspect_MethodInvocation $inv)
{
if (!$active = Sabel_Db_Transaction::isActive()) {
Sabel_Db_Transaction::activate();
}
try {
$result = $inv->proceed();
if (!$active) {
Sabel_Db_Transaction::commit();
}
return $result;
} catch (Exception $e) {
if (!$active) {
Sabel_Db_Transaction::rollback();
}
throw $e;
}
}
}
詳しくは分からないのですがここにトランザクションのロジックがあるようなのですが、
これを例えばデータベースのデータを保存するさいにどのような記述で使えばよいのか
というサンプルを示して頂けないでしょうか?
ここでダウンロードができます
Sabel ドキュメントとか(非公式)
http://ebine.org/sabel/doc/index.html
No.1ベストアンサー
- 回答日時:
過去のドキュメントを参考URLに記載しました。
class TransactionConfig extends Sabel_Container_Injection
{
public function configure()
{
$this->aspect("User")->advice("TransactionAdvice");
}
}
class TransactionAdvice
{
/**
* @around movePoint
*/
public function processTransaction($invocation)
{
Sabel_DB_Transaction::activate(); # トランザクション有効化
try {
$result = $invocation->proceed();
Sabel_DB_Transaction::commit(); # 正常終了
return $result;
} catch (Exception $e) {
Sabel_DB_Transaction::rollback(); # 例外が発生したらロールバック
throw $e;
}
}
}
class User extends Sabel_DB_Model
{
public function movePoint()
{
$fromUser = MODEL("User", 1);
if ($fromUser->point < $point) {
throw new ...
} else {
$toUser = MODEL("User", 2);
if ($toUser->isValid()) {
...
} else {
throw new ...
}
}
}
}
として各クラスを、クラスパス上に配置します。
下記利用時のサンプルです。
$user = load("User", new TransactionConfig());
$user->movePoint();
とすれば、TransactionAdviceによるアスペクト処理が実行されます。
これは、@around movePoint としてアドバイスクラスにmovePointメソッドが指定されているので、movePoint()実行時の周辺(around)、つまりメソッドの実行前と実行後にアスペクトが介入します。
参考URL:http://old.sabel.php-framework.org/doc/container …
ご返答ありがとうございます。
そのようなページがあったんですか。
まだ使い方を完璧に把握したわけではありませんが、
とりあえず試してみたらできました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- PHP php エラー 2 2022/10/23 16:43
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php5-extensions を make でき...
-
query、prepare、executeの違い
-
mysql複数レコードをまとめて削...
-
copy() で属性保存
-
PHPからCプログラムを実行して...
-
PHPでUNIXシステムコマンド...
-
Switch文における、returnとbre...
-
PHPで、C#のプログラムを実行す...
-
PHPからlhaコマンドを使いたい
-
ヒアドキュメントの中で演算子...
-
CRON でPHPスクリプトをGET変数...
-
phpでPEAR::DBを使っているので...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
CFileDialogの最初のディレクト...
-
PHPのみでの背景色は指定できる...
-
リンク先を隠す方法はないでし...
-
2つの画像ファイルが異なるファ...
-
PHPのif文でその処理を途中で抜...
-
index.phpに入るには、どうすれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
php実行中に実行中のphpファイ...
-
phpからエクセルのマクロを実行...
-
ヒアドキュメントの中で演算子...
-
PHPからバッチファイルの実行
-
【PHP】命令は記述順に処理...
-
シェルスクリプトをPHPで動かそ...
-
Switch文における、returnとbre...
-
httpdのプロセスが自動で消えな...
-
copy() で属性保存
-
Prompt入力値をphp変数として取...
-
JSのWINOW.CONFI...
-
htmlでsubmitで指定したAction...
-
unix(freebsd)でmysqldumpコマ...
-
PHPのsystem()でjava
-
別サーバのプログラムを起動
-
PHPでコマンドプロンプトを実行...
-
社内LANで複数台のPCからApache...
-
PHPからCプログラムを実行して...
-
PHPで、C#のプログラムを実行す...
おすすめ情報