Page_Controllerのinit()関数には次のものがあります。
if ($this->ClassName != 'Trail' && $this->ClassName != 'Ride'){
Session::clear('RelatedTrails');
} elseif ($this->ClassName == 'Ride') {
Session::clear('RelatedTrails');
Session::set('RelatedTrails', $this->getTrails());
}
ライドクラス:
function getTrails() {
return $this->Trails();
}
static $many_many = array(
'Trails' => 'Trail'
);
トレイルクラス
class Trail extends Page {
.....
static $belongs_many_many = array(
'Rides' => 'Ride',
);
....
}
これにより、ユーザーがライドページにアクセスしたときにセッションが設定されます。このセッション情報をトレイルページで利用できるようにする必要があるのは、ライドページからトレイルページに直接移動する場合のみです。
「ライド」クラスのページにアクセスすると、セッションが設定されないという問題があります。ifステートメントの最初の部分からSession::clearをコメントアウトすると、セッションは正しく設定されますが、他のページタイプでクリアする必要があります。
最初の部分にエコーとダイを入れて、ここに落ちているかどうかを確認してみましたが、ヒットすることはありません。これは非常に奇妙な振る舞いです。誰かがここで何が起こっているのか見ることができますか?
更新:さらに説明すると、私には乗り物とトレイルがあります。乗り物には多くのトレイルが含まれる場合があります。ライドページには、ユーザーがライドに関連付けられているトレイルにクリックスルーできるメニューがあります。ライドからトレイルまでクリックすると、クリックしたばかりのライドに関連する他のトレイルを表示するメニューが表示されます。メニューのトレイルは、ライドページで設定されたセッションに保存されます。これらの関連するトレイルを引き続き表示できるように、メニューを介して他のトレイルをナビゲートするため、このセッションを保持する必要があります。
ユーザーが(乗車ではなく)トレイルページに直接リンクしている場合。関連するトレイルがないため、すべてのトレイルを表示できるように、これを知る必要があります。