2017-04-20 13 views
0

"スパゲッティコード"のスクリプトをTwigに変換する必要があります。 Twigのドキュメントを読んで基礎を学びました。しかし、私はすべてを適切に行うためのアドバイスが必要なので、後で再変換する必要はありません。変換されたときに、私のindex.phpは次のようになります、スパゲッティコードをTwigに変換

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

を私の知る限り理解:

ファイルの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 
$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> 

私は右理解していれば、それは "含める" 小枝テンプレートで機能することも可能です(とテンプレートでいくつか微調整しているので)、display_dropdown()のような既存のPHP関数を書き換える必要はありません。

私に関係するものは、変数(Twig render関数に渡されます)に配列されています。 Twigが動作する前に、何かが恋しいのか、それとも実際に変数($page_message$footer_textなど)を手動で定義する必要がありますか?

「スパゲッティコード」では変数をどこかに定義すれば、いつでもecho機能を使用してアクセスすることができます。さて、PHPコードに存在するすべての変数を表示し、手動でTwigパラメータ配列に渡す必要があるようです。本当に?

答えて

1

ソリューションが提供されていないため、私はそれを自分で見つけました。あなたがしなければならないことは、このようなコード行を使うことだけです。あなたのPHPファイル(インクルードされたファイルを数える)にあるすべての変数がTwigテンプレートで利用できるようになり、新しい変数が追加されたときに何かを書き直す必要はありませんPHPファイルを後で(また、自動的にTwigで利用できるようになります):

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

Mindaugas、あなたがビューをレンダリングするために使用する技術を変更するだけで、コードのもつれが少なくなるわけではありません。

私は、Twigをデフォルトのテンプレート言語として使用するSymfonyのような、MVCフレームワークを使用して、さらに一歩進んで責任を分けるべきだと思います。

幸運を祈る!

+0

あなたのご意見ありがとうございます。 Symfonyのフレームワークを今すぐ使う必要はありませんが、現在のスクリプトをTwigに変換すると、実際にはすでに違いがあります。 –

関連する問題