【问题标题】:how to assign an object to smarty templates?如何将对象分配给 smarty 模板?
【发布时间】:2011-01-25 18:06:06
【问题描述】:

我在 PHP 中创建了一个模型对象

class User {
  public $title;

  public function changeTitle($newTitle){
    $this->title = $newTitle; 
  }
}

如何仅通过分配对象在 smarty 中公开用户对象的属性?

我知道我能做到

$smarty->assign('title', $user->title);

但我的对象有超过 20 多个属性。

请指教。

编辑 1

以下内容对我不起作用。

$smarty->assign('user', $user);

$smarty->register_object('user', $user);

然后我尝试{$user->title}

什么都没出来。

编辑 2

我目前只尝试在 smarty 模板中输出对象的公共属性。对不起,如果我将任何人与该功能混淆了。

谢谢。

【问题讨论】:

    标签: php smarty viewmodel variable-assignment


    【解决方案1】:

    您应该能够从 Smarty 模板访问对象的任何公共属性。例如:

    $o2= new stdclass;
    $o2->myvar= 'abc';
    $smarty->assign('o2', $o2);
    
    ### later on, in a Smarty template file ###
    
    {$o2->myvar}  ### This will output the string 'abc'
    

    如果您计划在将对象分配给 Smarty 模板后更新对象,也可以使用 assign_by_ref

    class User2 {
      public $title;
      public function changeTitle($newTitle){
        $this->title = $newTitle; 
      }
    }
    $user2= new User2();
    $smarty->assign_by_ref('user2', $user2);
    $user2->changeTitle('title #2');
    

    并且在模板文件中

    {$user2->title}  ## Outputs the string 'title #2'
    

    【讨论】:

    • 对不起,它对我不起作用。我不确定为什么。请参阅我的编辑 1。
    • 您是在将对象分配给 Smarty 之前还是之后调用 $user->changeTitle()
    • 我很抱歉。我目前正在尝试输出对象的属性。让我再输入一条 EDIT 消息
    【解决方案2】:

    这个对我有用。

    $smarty->register_object('user', $user);
    
    // Inside the template. note the lack of a $ sign
    {user->title}
    

    不管我有没有$符号,这个都不行

    $smarty->assign('user', $user);
    

    希望有人能告诉我原因。

    【讨论】:

      【解决方案3】:
      $smarty->assign('user', $user);
      

      在模板中

      {$user->title}
      

      【讨论】:

      • 对不起,它对我不起作用。我不确定为什么。请参阅我的编辑 1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2011-07-09
      • 2011-01-15
      相关资源
      最近更新 更多