php, mysql и smarty. Запутано «{» в платформе социального движка

0

Привет, я смотрел PHP-код из социального движка, и у них есть что-то вроде этого:

header("Location:user_event.php?event_id={$event_id}&justadded=1")

почему id it not

header("Location:user_event.php?event_id=$event_id&justadded=1")

или

header("Location:user_event.php?event_id=".$event_id."&justadded=1")

потому что значение $event_id верное, но когда перенаправление страницы я перехожу к:

user_event.php?event_id=&justadded=1

теперь я уверен, что сделал что-то, чтобы испортить значение {$ event_id}, но я даже не знаю, что это значит. это связано с умением?

Теги:
smarty

1 ответ

0
Лучший ответ

Использование {$ variable} внутри строк с двойными кавычками имеет две причины: a) для предотвращения ошибок, таких как:

$variable = "prefix";
header("Location:somepage.php?value=$variable_name"); // PHP would actually look for a variable called $variable_name instead of the desired $variable

b), позволяющий вставлять переменные массивов и объектов в строку без прерывания ее

header("Location:somepage.php?value=$myObject->someValue"); // this wouldn't work
header("Location:somepage.php?value={$myObject->someValue}"); // this works

Но все это не должно иметь никакого эффекта с Smarty, потому что Smarty анализирует только {} объекты внутри файлов шаблона и header("Location: ...."); определенно не принадлежит там, если у вас нет {php}header("Location:...");{/php}

Если у вас есть более поздний, чем вам нужно получить доступ к $event_id по-другому, потому что он недоступен из класса Smarty, если вы сначала не назначили его

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

чем

{php}
    $event_id = $this->get_template_vars('event_id');
    header("Location:user_event.php?event_id={$event_id}&justadded=1");
{/php}

или

{php}
    global $event_id;
    header("Location:user_event.php?event_id={$event_id}&justadded=1");
{/php}

Но наличие такого кода внутри шаблона совершенно неверно. Обычно такие вещи следует делать в файле php активации до того, как шаблон когда-либо вызывается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню