2016-11-26 3 views
0

が含まれます変数$titleをエコーし​​て、get_include_contentsの第2パラメータ($params)を配列として渡します。問題はundefined variable $titleです。 get_include_contents内部print_rが、これは言うところで:あなたが見ることができるようPHP未定義の変数は内部の私は、次の機能を持っている

Array 
(
[filename] => /home/lchost/EOSS2/app/view/layout.php 
[params] => Array 
    (
     [title] => Hello World 
    ) 

[title] => Hello World 
[contents] => <!doctype html> 
    <html lang="en"> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Hello World</title> 
    </head> 
    <body> 
     <div id="todos"></div> 
     <input id="todo" type="text" /> 
     <input type="button" id="addTodo" value="Add Todo" /> 
    </body> 
    </html> 
) 

問題になる可能性がどのような変数$title ... を定義していますか?何か案は?前もって感謝します。

私はこれを修正しました。問題はどこか他のところにあった...これはうまくいきました。管理者はこの質問を閉じることができます。ありがとうございました。内部

function get_include_contents($filename, $params = array()) { 
    global $tpl_params; 
    if (is_file($filename)) { 
     ob_start(); 
     $tpl_params = $params; // make it global 
     include $filename; 
     $contents = ob_get_contents(); 
     ob_end_clean(); 
     print_r(get_defined_vars()); 
     return $contents; 
    } 
    return false; 
} 

:それはどのように動作するかだ

答えて

0

は、含まれているファイルはグローバルスコープから始まり、それはget_include_contents(内部で定義されたものを)見ていないだろう、あなたの唯一のチャンスは再び地球環境を使用することですテンプレート:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title><?= $tpl_params['title']; ?></title> 
</head> 
<body> 
<div id="todos"></div> 
<input id="todo" type="text" /> 
<input type="button" id="addTodo" value="Add Todo" /> 
</body> 
</html> 

私の最後のアドバイスは、Smartyの、小枝、Zend_Viewの、またはその他のような専用のテンプレートエンジンを使用することです。あなたはあなたが好きなだけ多くを見つけることができます、それぞれが異なる機能と構文を持っています、あなたの好きなものを選んでください。

本当に深刻なセキュリティバグに終わるので、独自のテンプレートエンジンを構築しないでください。

+0

私は、使用可能なテンプレートエンジンを使用せずに独自のフレームワークを作成しています。 githubのEOSS2をチェックしてください。 – durisvk

+0

私は、明確なPHP知識を持っていないので、あなたはそれをしないことを提案していました。それはフレームワークのためのものです。 – Johnny

関連する問題