将意大利面条代码转换为Twig

时间:2017-04-20 14:17:14

标签: symfony twig

需要使用" spaghetti code"转换脚本到了Twig。阅读Twig文档并了解基础知识。但是,我需要有关如何正确执行所有操作的建议,因此以后不需要重新转换。让我们说当前的脚本看起来如下:

文件index.php:

<?php
$page_message="do it";

function display_dropdown($max)
    {
    for ($i=0; $i<$max; $i++)
        {
        echo "<option value='$i'>Option $i</option>";
        }
    }
?>
<!DOCTYPE html>
<html>
<body>
<h1><?php echo $page_message; ?></h1>
<form method="post" action="<?php echo basename($_SERVER["SCRIPT_FILENAME"]); ?>">
<select name="whatever"><?php display_dropdown(10); ?></select>
<input type="submit" value="go">
<?php include("footer.php");?>
</body>
</html>

footer.php看起来:

<?php
$footer_text="blah blah";
?>
<footer><?php echo $footer_text; ?></footer>

据我所知,我的index.php在转换为Twig时应如下所示:

<?php
$page_message="do it";

function display_dropdown($max)
    {
    for ($i=0; $i<$max; $i++)
        {
        echo "<option value='$i'>Option $i</option>";
        }
    }



$twig_params_array=array("page_message"=>$page_message, "footer_text"=>"blah blah");

require_once("../lib/Twig/Autoloader.php");
Twig_Autoloader::register();
$loader=new Twig_Loader_Filesystem("templates");
$twig=new Twig_Environment($loader);


echo $twig->render("index_template.html", $twig_params_array);
?>

然后我应该使用以下代码创建index_template.htmlfooter_template.html(或其他):

index_template.html

<!DOCTYPE html>
<html>
<body>
<h1>{{ page_message }}</h1>
<form method="post" action="{{ _self }}>">
<select name="whatever"><?php display_dropdown(10); ?></select>
<input type="submit" value="go">
{{ include('footer_template.html') }}
</body>
</html>

footer_template.html

<footer>{{ footer_text }}</footer>

如果我理解正确,也可以&#34;包括&#34; Twig模板中的函数(在模板中进行了一些调整),因此我不需要重写现有的PHP函数,如display_dropdown()。因为此时不显示下拉列表...

关注我的是带变量的数组(传递给Twig render函数)。我错过了什么,或者在Twig可以工作之前是否真的需要手动定义每个变量(如$page_message$footer_text)?

这似乎要做很多工作,因为在&#34;意大利面条代码&#34;如果我在某处定义变量,我可以随时使用echo函数来访问它。现在,它看起来我需要查看PHP代码中存在的每个变量并手动将其传递给Twig参数数组。真的?

2 个答案:

答案 0 :(得分:3)

由于没有提供解决方案,我自己找到了。您所要做的就是使用这样一行代码,因此您在PHP文件中拥有的所有变量(计算包含的文件)都可以在Twig模板中使用,并且在新变量时您不需要重新编写任何内容稍后会添加到PHP文件中(它们也会自动在Twig中可用):

echo $twig->render("template_file_name.extension", get_defined_vars());

答案 1 :(得分:-1)

Mindaugas,只是改变你用来渲染视图的技术,不会让代码变得更加纠结。

我认为你应该更进一步,通过使用像Symfony这样使用Twig作为默认模板语言的MVC框架来划分责任。

祝你好运!