Smarty 3.1.28로 업그레이드하면 오류가 발생합니다!

6443 단어 SmartyPHP
Smarty 3.1.28로 업그레이드하면 의외의 곳에서 문제가 공유됩니다.
3.1.27은 전혀 문제가 없지만 이런 이터레이션 업그레이드에는 문제가 있습니다.
문제 부분은 generator를 템플릿 변수assign로 설정할 때 발생합니다.
재현 문제의 최소 번호는 다음과 같다.
index.php
<?php
require_once '/usr/share/php/Smarty/Smarty.class.php';

$smarty = new Smarty();
$smarty->setTemplateDir('../../templates')
    ->setCompileDir('../../templates_c')
    ->addPluginsDir('../../smarty_plugins')
    ->setCacheDir('../../cache')
    ->setConfigDir('../../smartyconfigs');

function gen()
{
    $arrSample = [
        0 => 'a'
        , 1 => 'b'
        , 2 => 'c'
        , 3 => 'd'
    ];

    foreach ($arrSample as $val) {
        yield $val;
    }
}

$smarty->assign('generator', gen());
$smarty->display('sandbox/index.tpl');
index.tpl
<!DOCTYPE HTML>
<html lang="ja-JP">
    <head>
        <meta charset="UTF-8">
        <meta name="robots" content="NOINDEX,NOFOLLOW" />
        <meta http-equiv="content-language" content="ja" />
        <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport' />
        <link rel="icon" href="favicon.ico" />
        <link href="/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
        <link href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet" type="text/css" />
        <title></title>
    </head>
    <body>
        <div class="container">
            {foreach $generator as $val}
                {$val}
            {/foreach}
        </div>
        <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
        <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
        <script src="/js/bootstrap.min.js"></script>
    </body>
</html>
재현된 잘못은 여기에 있다.

템플릿을 펼쳤을 때 foreach가 두 바퀴 돌았던 것 같은데...

좋은 웹페이지 즐겨찾기