Там мало чем отличается от синтаксиса PHP и Twig. Twig предлагает чисто шаблонную перспективу от PHP, чтобы помочь защитить ваши шаблоны от бизнес-логики c и предоставляет такие возможности, как автоматическое экранирование HTML сущностей и Javascript, а также беззвучное игнорирование неопределенных переменных, индексов массивов или методы / свойства объекта, аналогичные оператору ??
(null coalesce) в PHP.
Я настоятельно рекомендую вам взять день и изучить очень ограниченный синтаксис, который имеет Twig https://twig.symfony.com/doc/2.x/ между версиями 1, 2 и 3 есть тонкие различия. С большим объяснением того, как ветка работает в https://twig.symfony.com/doc/2.x/templates.html
Выход Twig
{{ var }}
эквивалентен
<?php echo htmlspecialchars((isset($var) ? $var : null), ENT_QUOTES, 'UTF-8'); ?>
объявления переменных Twig
{% set var = 'value' %}
эквивалентен
<?php $var = 'value'; ?>
Таким образом, {{ }}
можно рассматривать как ярлык для вывода на печать <?php echo ?>
, а точнее <?= ?>
. Где {% %}
- открывающие и закрывающие разделители операторов веток, и их можно рассматривать аналогично открывающим и закрывающим PHP разделителям операторов <?php ?>
.
Важно отметить, что у ветки нет доступа к глобальным или пространствам имен PHP. Таким образом, что-то вроде <?php foreach ($vars as $i => $var) { ?>
обрабатывается по-разному в ветке, для этого экземпляра {% for i, var in vars %}
.
Доступ к переменной Twig
Twig также может получить доступ к обоим ключам ассоциативного массива и свойства объекта с одинаковым синтаксисом var.property
, с возможностью автоматического вызова get
, is
и has
методов объекта.
Если var
- массив, {{ var.property }}
эквивалентно
$var = ['property' => 'value'];
echo htmlspecialchars(($var['property'] ?? null), ENT_QUOTES, 'UTF-8'); //PHP 7.0+
echo htmlspecialchars((array_key_exists('property', $var) ? $var['property'] : null), ENT_QUOTES, 'UTF-8'); //PHP < 7.0
, если var
является объектом, {{ var.property }}
соответствует
class Var
{
private $property = 'value';
public function getProperty()
{
return $property;
}
}
$var = new Var();
if (isset($var->property)) {
echo htmlspecialchars($var->property, ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'property'])) {
echo htmlspecialchars($var->property(), ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'getProperty'])) {
echo htmlspecialchars($var->getProperty(), ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'isProperty'])) {
echo htmlspecialchars($var->isProperty(), ENT_QUOTES, 'UTF-8');
} elseif (is_callable([$var, 'hasProperty'])) {
echo htmlspecialchars($var->hasProperty(), ENT_QUOTES, 'UTF-8');
} else {
echo null;
}
Отсутствуют части вашего шаблона. Например, переменные шаблона и начало ваших блоков if
и for ... in
. Чтобы привести более полный пример, я включил некоторые утверждения о том, как будут выглядеть переменные и начальные операторы if
и foreach
.
Чтобы преобразовать предоставленный вами шаблон Twig в PHP, потребуется похожи на ниже.
<?php
/* START ASSERTIONS */
$iterable = [
['status' => true],
];
$test_enabled = 'Enabled';
$text_disabled = 'Disabled';
$button_remove = 'Remove';
if (!empty($iterable)) {
$list_row = 0;
foreach ($iterable as $i) {
?>
<tr>
<?php /* END ASSERTIONS */ ?>
<td class="text-left">
<select name="product[<?php echo htmlspecialchars($list_row, ENT_QUOTE, 'UTF-8'); ?>][status]" id="input-status" class="form-control">
<?php if (array_key_exists('status', $i) ? $i['status'] : null) { ?>
<option value="1" selected="selected"><?php echo htmlspecialchars($text_enabled, ENT_QUOTE, 'UTF-8');; ?></option>
<option value="0"><?php echo htmlspecialchars($text_disabled, ENT_QUOTE, 'UTF-8'); ?></option>
<?php } else { ?>
<option value="1"><?php echo htmlspecialchars($text_enabled, ENT_QUOTE, 'UTF-8'); ?></option>
<option value="0" selected="selected"><?php echo htmlspecialchars($text_disabled, ENT_QUOTE, 'UTF-8'); ?></option>
<?php } ?>
</select>
</td>
<td class="text-left">
<button id="button_cancel" type="button" onclick="$('#product_row_<?php echo htmlspecialchars($list_row, ENT_QUOTE, 'UTF-8'); ?>').remove()" data-toggle="tooltip" title="<?php echo htmlspecialchars($button_remove, ENT_QUOTE, 'UTF-8'); ?>" class="btn btn-danger">
<i class="fa fa-minus-circle"></i>
</button>
</td>
</tr>
<?php
$list_row = $list_row + 1;
} /* endfor */
} /* endif */
?>