创建自己的Smarty变量,如$ Smarty .session


Creating own Smarty variable like $smarty.session

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

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

提前感谢!

可能没有办法使用语法$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文件中使用命名空间)。