2012-12-16 25 views
2

不能得到會話變量在ProjectsController.php我設置會話變量,因爲我想這些信息是在所有控制器,模型和視圖訪問:CakePHP的 - 鑑於

$this->Session->write('Project.title', $this->Project->title); 

現在,當我嘗試從項目視圖訪問,就像這樣:

 <p>Project: <strong> 
     <?php if (isset($session->read('Project.title'))): 
      $session->read('Project.title'); 
     ?> 
     <?php else: ?> 
      Not selected 
     <?php endif; ?> 
     </strong></p>  

,我發現了以下錯誤:

Fatal error: Can't use method return value in write context 

它是指上述代碼的第二行。

我已經通過CakePHP文檔,也搜索過,我在這裏做錯了什麼?

謝謝!

編輯:

我也嘗試使用:

$this->Session->read('Project.title') 

導致同樣的錯誤消息。

回答

6

你應該做一下PHP告訴你一段時間:) 錯誤信息很清楚。這種方式不能使用isset()和empty()。 他們只能直接使用變量,而不是方法。因此,使用

<?php if ($this->Session->check('Project.title')) { 
    echo $this->Session->read('Project.title'); 
} ?> 

如菜譜

記錄,你也可以做

<?php 
$title = $this->Session->read('Project.title'); 
if ($title) { 
    echo $title; 
} ?> 

甚至

<?php if ($title = $this->Session->read('Project.title')) { 
    echo $title; 
} ?> 

最後一個不是CakePHP的編碼約定,雖然。

+0

是馬克,我一定要聽吧:)這個解決它,謝謝。 – CodeVirtuoso

+0

對於CakePHP 3.x解決方案,請參閱http://stackoverflow.com/a/32668870 – Imdad

0

isset()不能處理那樣的功能。存儲$session對象的read()函數的返回值,然後測試if()條件裏面變量:

$title = $session->read('Project.title'); 
echo ($title) ? $title : '';