簡單地說就是 persistent 物件不能跨 class 存取,而 session 物件可以。
persistent 物件最適合使用的情況是儲存搜尋表單的資料,這樣在換頁的時候就不用操煩太多。例如向下面用 phalcon devtool 生出來的 searchAction 程式碼片段。
if ($this->request->isPost()) { $query = Criteria::fromInput($this->di, 'Testmodel', $_POST); $this->persistent->parameters = $query->getParams(); } else { $query = Criteria::fromInput($this->di, 'Testmodel', $_GET); $this->persistent->parameters = $query->getParams(); }
實際上 persistent 是用 session bag 物件,如果作 var_dump($this->persistent) 可以看到詳細的資料,且可以發現被限定在單一 class 中。
而預設的 session 物件是用 File adapter (Phalcon\Session\Adapter\Files),雖然說官方文件寫存取的方式需要透過 get() & set() 方法,但是實際上直接當成一般參數作存取似乎也沒甚麼問題 (當然養成好習慣比較好)。同樣也可用 isset() 這個 php 內建function 或者用 session 物件的 has() 方法檢查是否存在。
// 這兩個寫法都可以用,但建議乖乖用 set 寫入 $this->session->set("customerid", 1); $this->session->customerid= 1;
// 這兩個寫法都可以用,但建議乖乖用 get 讀取 echo $this->session->get("customerid"); echo $this->session->customerid;
// 這兩個寫法都可以用 var_dump($this->session->has("customerid")); var_dump(isset($this->session->customerid));