TWIG和PHP语法

问题描述 投票:0回答:1
<td class="text-left">
      <select name="product[{{ list_row }}][status]" id="input-status" class="form-control">
          {% if i.status %}
            <option value="1" selected="selected">{{ text_enabled }}</option>
        <option value="0">{{ text_disabled }}</option>
             {% else %}
             <option value="1">{{ text_enabled }}</option>
               <option value="0" selected="selected">{{ text_disabled }}</option>
             {% endif %}
      </select>
</td>
    <td class="text-left">
           <button id="button_cancel" type="button" onclick="$('#product_row_{{ list_row }}').remove()" data-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger">
      <i class="fa fa-minus-circle"></i>
        </button>
          </td> 
             </tr>
       {% set list_row = list_row + 1 %}
        {% endfor %}
        {% endif %}

对于以上代码“选择”,我应如何将其转换为php语法?

是否同样要设置list_row = list_row +1? %}

php twig
1个回答
0
投票

与PHP和Twig的语法没有太大区别。 Twig从PHP提供了纯模板的观点,以帮助使模板摆脱业务逻辑,并提供诸如自动转义HTML实体和Javascript的功能,并静默忽略未定义的变量,数组索引或对象方法/属性,类似于PHP中的??(空合并)运算符。

[我强烈建议您花一点时间来学习Twig具有https://twig.symfony.com/doc/2.x/的非常有限的语法,版本1、2和3之间存在细微的差异。并详细说明了Twig在https://twig.symfony.com/doc/2.x/templates.html中的工作方式

树枝输出

echo htmlspecialchars((isset($var) ? $var : null), ENT_QUOTES, 'UTF-8');

相当于

{{ var }}

Twig变量声明

$var = 'value';

相当于

{% set var = 'value' %}

Twig变量访问

Twig还​​能够使用相同的语法var.property访问关联数组键和对象属性,并具有自动调用对象的getishas方法的能力。

{{ var.property }}

如果var是数组,则等效于

$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是一个对象,则等效于

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, '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;
}



模板的某些部分丢失。例如模板变量以及iffor ... in块的开头。为了提供更完整的示例,我提供了一些有关变量以及开始的ifforeach语句外观的断言。

要将您提供的Twig模板转换为PHP,它看起来类似于以下内容。

<?php
/* START ASSERTIONS */

$list_row - 0;
$i = [
    'status' => true
];
$test_enabled = 'Enabled';
$text_disabled = 'Disabled';
$button_remove = 'Remove';

if (true) {
    foreach ($iterable as $value) { 
?>
<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 */
?> 
© www.soinside.com 2019 - 2024. All rights reserved.