需要使用" 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.html
和footer_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参数数组。真的?
答案 0 :(得分:3)
由于没有提供解决方案,我自己找到了。您所要做的就是使用这样一行代码,因此您在PHP文件中拥有的所有变量(计算包含的文件)都可以在Twig模板中使用,并且在新变量时您不需要重新编写任何内容稍后会添加到PHP文件中(它们也会自动在Twig中可用):
echo $twig->render("template_file_name.extension", get_defined_vars());
答案 1 :(得分:-1)
Mindaugas,只是改变你用来渲染视图的技术,不会让代码变得更加纠结。
我认为你应该更进一步,通过使用像Symfony这样使用Twig作为默认模板语言的MVC框架来划分责任。
祝你好运!