ユーザーの登録フォームの変更でハマる。そしてLegacyの闇コードを見る。
XOOPSCubeLegacyは素晴しいプログラムなんだけど、ときどき「あれれ?」ってなところがある。
ユーザー登録の所をいじってて、その闇にぶつかった。
ActionFormオブジェクトをHeaderリダイレクトさせて持ち越したいみたい。「えー、そんな豪腕な」って思うけど、これがSESSION変数に一度入れてやっちゃってるんだな。
するとですねー。SESSION変数からのUnsesializeでこける。どーしてもこける。
しょうがないので、SESSION変数の文字列を見てみた。ちゃんとなってる。でも駄目。その理由はこれ。
れぶろぐ - [PHP] __PHP_Incomplete_Class の対処法
セッションに保存したオブジェクトを復元する処理が上手くいっていないようだ。セッションの中身をのぞいてみると、なにやら妙なことになっている。
Array
(
[continuation] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => Piece_Flow_Continuation__PHP_Incomplete_Class というキーワードで検索してみると、 unserialize() がどうこうとかいろいろ書かれていたが、少し試行錯誤してみたところ、どうも session_start() する前にクラスが定義されていないといけないらしい。
これに気付いたのは、SESSIONに格納された文字列を手元のPHP環境でUnserializeしたところ、 __PHP_Incomplete_Class Objectが出たから。
んで、Legacy/Userのコードを見てみると、
UserRegister_confirmAction.class.php
<?php /** * @package user * @version $Id: UserRegister_confirmAction.class.php,v 1.3 2007/12/15 15:45:35 minahito Exp $ */ if (!defined('XOOPS_ROOT_PATH')) exit(); require_once XOOPS_MODULE_PATH . "/user/forms/UserConfirmForm.class.php"; require_once XOOPS_MODULE_PATH . "/user/forms/UserRegisterEditForm.class.php"; require_once XOOPS_MODULE_PATH . "/user/class/RegistMailBuilder.class.php";
読んでる!確かにUserRegisterEditFormを先読みしている!!!