像$ smarty.session一样创建自己的Smarty变量

时间:2014-08-04 17:06:45

标签: php session smarty

所以我使用的是一个自定义的PHP会话处理程序(如果你熟悉框架,那么它就像Laravel中的那个一样),它没有注册到$_SESSION超全局,所以我可以'使用{$smarty.session.some_data}来访问它。

但是,在我的Smarty模板中,我仍然希望检索存储在会话中的值,而无需一直手动将值分配给Smarty变量。创建访问会话数据的方法的最佳方法是什么?

提前致谢!

1 个答案:

答案 0 :(得分:1)

可能没有办法使用语法$smarty.yourarray.data,但这种语法用于全局数组($ _POST,$ _GET,$ _SESSION,$ _COOKIE,$ _SERVER)。

但是,您可以使用与PHP相同的方法访问静态类。

假设您在PHP文件中有以下类:

class Session
{
    public static function get($data) {
        if (is_int($data)) {
            return $data * 3;
        }
        return $data;
    }
}

现在,你不需要为Smarty分配任何东西。

当您在Smarty文件中想要访问此类方法时,您只需使用:

{Session::get('something')}<br />
{Session::get(2)}

你会得到结果:

something
6

正如所料。

所以你不必做任何事来访问这个课程(没有修饰语/功能,你甚至不需要分配这个课程。)

但是,假设您在命名空间中使用了Session类:

<?php

//session.php

namespace MySession;

class Session
{
    public static function get($data) {
        if (is_int($data)) {
            return $data * 3;
        }
        return $data;
    }
}

如果你想在Smarty里面这个静态类,你需要注册你的课程:

require ('session.php');
$smarty->registerClass('Session', 'MySession\Session');

使它工作(据我所知,你不能在TPL文件中使用命名空间。)