所以我使用一个自定义的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文件中使用命名空间)。