Smarty вызывает метод объекта в операторе if - PullRequest
1 голос
/ 30 сентября 2019

Итак, я пытаюсь присвоить объект smarty.

    $a = FrameworkCore::getUserSessionObj(); // returns the object ofc
    $smarty->registerObject('global_session',$a);



  {if $global_session->isLoggedIn eq true}
    LOGGED IN
  {else}
    NO
  {/if}

Теперь я пытаюсь поместить вызов метода в оператор if, но он не будет работать. Пробовал несколько раз с разными значениями и другими методами.

Вывод вызова метода работает нормально (см. Ниже).

  {global_session->getType}
  {global_session->isLoggedIn}

Так что, похоже, / мой сбой в ifзаявление, но я не могу заставить его работать.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Когда вы используете registerObject(), вы добавите их как пользовательские функции. Таким образом, вы можете использовать такие выражения, как {global_session->getType} или {global_session->isLoggedIn}, как вы сделали. Но вы не можете использовать его как переменные, как в {$global_session}, потому что вы не назначили такую ​​переменную с assign(). Это также означает, что вы не можете написать код, подобный следующему:

{if global_session->isLoggedIn eq true}
...
{/if}

Проверьте руководство по объектам в smarty :

  • Oneспособ состоит в том, чтобы зарегистрировать объекты в шаблоне, а затем использовать доступ к ним через синтаксис, аналогичный пользовательским функциям.

  • Другой способ - assign() объекты к шаблонам и доступ к ним, как и к любымдругая назначенная переменная.

Поэтому, когда вы хотите использовать объект в качестве переменной, используйте assign().

0 голосов
/ 04 октября 2019

Похоже, вам нужно добавить скобки в имена методов, как в PHP.

{if $global_session->isLoggedIn()}
    LOGGED IN
{else}
    NO
{/if}
...