phalcon framework的session 与persistent 差异

Phanix
·
·
IPFS
·

简单地说就是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));

Original link: Phanix's Blog

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!