首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverstripe:会话出现问题。奇怪的行为

Silverstripe:会话出现问题。奇怪的行为
EN

Stack Overflow用户
提问于 2012-10-18 05:58:08
回答 1查看 976关注 0票数 0

我的Page_Controller的init()函数中有以下内容:

代码语言:javascript
复制
if ($this->ClassName != 'Trail' && $this->ClassName != 'Ride'){
    Session::clear('RelatedTrails');
} elseif ($this->ClassName == 'Ride') {
    Session::clear('RelatedTrails');
    Session::set('RelatedTrails', $this->getTrails());
}

乘车等级:

代码语言:javascript
复制
function getTrails() {

        return $this->Trails();
    }
static $many_many = array(
        'Trails' => 'Trail'
    );

Trail类

代码语言:javascript
复制
    class Trail extends Page {

        .....
        static $belongs_many_many = array(
            'Rides' => 'Ride',
        );
....
}

这将在用户访问乘车页面时设置会话。我需要使这个会议的信息,只有当他们直接从一个游乐设施页面到一个轨迹页面的时候才能在Trail页面上使用。

它给我带来了问题,因为当我访问“Ride”类页面时,会话没有设置。当我从if语句的第一部分注释掉Session::clear时,会话设置是正确的,但是我需要它来清除任何其他页面类型。

我试着在第一部分放一个回声和一个骰子,看看它是否掉进了这里,但它从来没有命中过。这是非常奇怪的行为。有没有人知道这是怎么回事?

更新:进一步解释:我有游乐设施和小径。一次骑行可以包含许多小径。在游乐设施页面上,有一个菜单,允许用户点击进入与游乐设施相关的路径。当他们点击从游乐设施到轨迹时,会有一个菜单显示与他们刚刚点击通过的游乐设施相关的其他轨迹。菜单的轨迹存储在Ride页面上设置的会话中。我需要保留此会话,因为它们通过菜单导航其他跟踪,以便我可以继续显示这些相关跟踪。

如果用户直接链接到轨迹页面(而不是通过游乐设施)。我需要知道这一点,这样我才能显示所有的轨迹,因为我没有任何相关的轨迹。

EN

回答 1

Stack Overflow用户

发布于 2012-10-18 06:56:56

而不是将所有的轨迹保存到会话中,我只需要在轨迹上设置持有者的ID,然后您就可以获得Ride页面并获取轨迹

这在你的案例中会起作用吗?

代码语言:javascript
复制
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;
    }
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12944081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档