我的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'
);Trail类
class Trail extends Page {
.....
static $belongs_many_many = array(
'Rides' => 'Ride',
);
....
}这将在用户访问乘车页面时设置会话。我需要使这个会议的信息,只有当他们直接从一个游乐设施页面到一个轨迹页面的时候才能在Trail页面上使用。
它给我带来了问题,因为当我访问“Ride”类页面时,会话没有设置。当我从if语句的第一部分注释掉Session::clear时,会话设置是正确的,但是我需要它来清除任何其他页面类型。
我试着在第一部分放一个回声和一个骰子,看看它是否掉进了这里,但它从来没有命中过。这是非常奇怪的行为。有没有人知道这是怎么回事?
更新:进一步解释:我有游乐设施和小径。一次骑行可以包含许多小径。在游乐设施页面上,有一个菜单,允许用户点击进入与游乐设施相关的路径。当他们点击从游乐设施到轨迹时,会有一个菜单显示与他们刚刚点击通过的游乐设施相关的其他轨迹。菜单的轨迹存储在Ride页面上设置的会话中。我需要保留此会话,因为它们通过菜单导航其他跟踪,以便我可以继续显示这些相关跟踪。
如果用户直接链接到轨迹页面(而不是通过游乐设施)。我需要知道这一点,这样我才能显示所有的轨迹,因为我没有任何相关的轨迹。
发布于 2012-10-18 06:56:56
而不是将所有的轨迹保存到会话中,我只需要在轨迹上设置持有者的ID,然后您就可以获得Ride页面并获取轨迹
这在你的案例中会起作用吗?
class Page_Controller extends ContentController {
...
public function init() {
parent::init();
// clear on every page
Session::clear('rideID');
}
...
}
class Ride_Controller extends Page_Controller {
...
public function init() {
parent::init();
// sets the session after clear
Session::set('rideID', $this->data()->ID);
}
...
}
class Trail_Controller extends Page_Controller {
...
public function getRelatedTrails()
// get the ID from session before clear
$rideID = Session::get('rideID');
parent::init();
$ridePage = DataObject::get_by_id('Ride', (int)$rideID);
if ($ridePage && $ridePage->Trails())
return $ridePage->Trails();
// here you could return some default Trails, in case no RideID is set
return false;
}
...
}https://stackoverflow.com/questions/12944081
复制相似问题