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가 두 바퀴 돌았던 것 같은데...
Reference
이 문제에 관하여(Smarty 3.1.28로 업그레이드하면 오류가 발생합니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ShibuyaKosuke/items/664d80cc397390b29cc7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)