Обработка индексов в темплейте

player

Новичок
Очень простой вопрос, но не знаю как лучше делать:

Темплейты у меня на простом рнр, то есть пишем <?=$myVariable;?> в нтмл коде.
При обработке форм таким образом возникает проблема: просто так <?=$_POST['field1'];?> не напишеш, если индекса не существует, везде на это будет указано нотайсами.

Как сделать так чтобы в некоторых массивах (по моему выбору) вместо несуществующих индексов автоматически ставилось скажем ""? Ведь в смарти такое работает для постов.

Спасибо. Жду элегантных решении
 

Духовность™

Продвинутый новичок
У меня сделано так: view (вид) - это класс, в который передаются данные из контроллеров:
PHP:
class my_controller {
// ...
$this->view->var = 'value';
}
Соответственно в шаблоне, который view отрабатывает, написано:
PHP:
<html><?=$this->var?></html>
В чем фишка? Фишка в том, что view реализует магические методы __set и __get:
PHP:
    public function __get($key)
    {
        return isset($this->data[$key]) ? $this->data[$key] : null;
    }
соответственно я в шаблоне при запросе несуществующей $this->var будет возвращен null, а null при печати ничего не выводит.

Т.е. идея в том, что надо отдавать null если запрашивается неопределенная переменная. А все остальное зависит уже от твоей архитектуры, можно 100 разных способов придумать. Но точно что не надо делать - это в шаблонах писать явно $_POST[..], ибо шаблоны не должны быть привязаны к предопределенным суперглобальным переменным.
 

Sokil.Dmytro

Новичок
Но точно что не надо делать - это в шаблонах писать явно $_POST[..], ибо шаблоны не должны быть привязаны к предопределенным суперглобальным переменным.
И да прибудет пассивная XSS с фотками толстого негра на вашем сайте :)
 
  • Like
Реакции: AmdY

Sokil.Dmytro

Новичок
Имеет не имеет, но если человек пытается напрямую в шаблон выводить _GET/_POST то лучше бы ему об этом знать
 

Духовность™

Продвинутый новичок
любые переменные шаблона нужно прогонять через htmlspecialchars. в этом контексте не важно, что там за массив - $_POST или $my_array.
 

Фанат

oncle terrible
Команда форума
player
твоя проблема решается очень просто.
Это должна быть переменная не $_POST['field1'], а $_FORM['field1']
а никакого $_POST в форме быть не должно.

Духовность™
не шаблона, а валуи формы, которые, скорее всего, товарищ и выводит
 

player

Новичок
Ну если уж вопрос о том пошел, то я напрямую _POST не вывожу. просто к вопросу это отношения не имеет, дело только в несуществующих индексах.

Духовность™
Спасибо, буду делать чтото подобное
 
Сверху