2012-10-17 35 views
0

我在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', 
     ); 
.... 
} 

此設置當會話用戶點擊一個騎車頁面。我只需要在Trail頁面上直接從騎乘頁面到路徑頁面上提供此會話信息。

這是給我的問題,當我點擊'騎'類頁面,會議沒有設置。當我從if語句的第一部分註釋掉Session :: clear時,會話設置正確,但是我需要它清除任何其他頁面類型。

我已經嘗試在第一部分中放入一個回聲和一個死亡來查看它是否落入此處但它從未被擊中。這是非常奇怪的行爲。任何人都可以看到這裏發生了什麼?

更新: 進一步解釋: 我有遊樂設施和路徑。騎可以包含許多小徑。在乘車頁面上,有一個菜單允許用戶點擊與乘坐相關的路線。當他們通過滑道進入滑道時,會出現一個菜單,顯示與剛纔點擊的滑道相關的其他滑道。菜單的路徑存儲在騎乘頁面上設置的會話中。我需要保留這個會話,因爲他們通過菜單導航其他路徑,所以我可以繼續顯示那些相關的路徑。

如果用戶直接鏈接到路徑頁面(不是通過搭乘)。我需要知道這一點,以便我可以顯示所有路徑,因爲我沒有任何關聯的路徑。

+0

我個人發現會話總是一種不好的方式來處理我認爲你正在嘗試做的事情。 如果你可以解釋Ride Page和Trail Page之間的關係,並且可能發佈相關代碼,我想我們可能會找到更好的方法來處理它。 – Zauberfisch

+0

謝謝。我已添加更新和更多代碼 – Fraser

+0

此代碼在哪個類中? 並追蹤一頁或一個數據對象? – Zauberfisch

回答

2

而不是保存所有路徑到會話我只想設置對徑持有者 的ID,那麼你可以得到乘坐頁面和獲取創新

這會在你的情況下工作?

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; 
    } 
    ... 
} 
+0

感謝您的迴應。我遇到的唯一問題是,如果我將會話設置爲從任何地方清除(即使是首頁),會話也不會在騎乘頁面上設置 – Fraser

+0

爲什麼您需要清除會話? – Zauberfisch

+0

,因爲如果有人不依賴乘車而導航到路線,我需要能夠顯示所有其他路線,而不僅僅是與乘車相關的路線。你看,一條小道可以屬於很多遊樂設施,所以我們不知道要展示哪些人,所以我們會把它們全部展示出來。我已經設法通過將查詢字符串從騎乘路線傳遞到路線來進行排序,並且只有在相關路線存在的情況下才顯示相關路線。感謝您花時間幫助! – Fraser