独自の MVC フレームワークを構築していますが、変数をビューに送信するときに問題が発生しました。は次のloadView()
ようになります。
function loadView($view, $variables = array())
{
$file_path = APPLICATION_PATH . 'views/' . $view;
if (file_exists($file_path))
{
if (is_readable($file_path))
{
if (! empty($variables)) extract($variables);
include($file_path);
}
else
{
throw new Exception('Could not read view from ' . $file_path);
}
}
else
{
throw new Exception('Could not load view from ' . $file_path);
}
}
期待どおりに動作します。ただし、このようなテンプレート ビューを設定すると、奇妙なことが起こります。
loadView('layout/header.php');
loadView($view);
loadView('layout/footer.php');
次のように呼び出されます ($user
はオブジェクトです):
$data['view'] = 'login/showUser.php';
$data['user'] = $user;
loadView('layout/template.php', $data);
$view
変数がテンプレート ファイルに設定され、正しいビューが読み込まれます。ただし、$user
変数は、次のコードのみを含む動的に読み込まれたビューに移動できません。
<p>User ID: <?php echo $user->id; ?></p>
$view
CodeIgniter でこれを行うことができますが、テンプレートへの最初の呼び出しで変数と$user
変数が抽出されるとloadView()
、スコープに単純に含まれる次のビューで使用できるようになるため、少し奇妙に感じます。
私は何を見落としましたか?