我一直在网上阅读,将HTML和PHP放在同一文件中不是一个好主意。为什么会这样呢?如果是这样,为什么以及如何精确分离文件?
答案 0 :(得分:1)
分离HTML和PHP代码的最佳方法是使用MVC设计模式,MVC体系结构在Model
View
和Controller
中应用了分离代码的方法。
MVC是通常用于开发用户界面的体系结构模式 将应用程序分为三个相互关联的部分。这样做是为了 将信息的内部表示与信息的处理方式分开 向用户展示并接受。 MVC设计模式将这些因素解耦 主要组件可实现有效的代码重用和并行开发。
来源:Wikipedia
基本上,所有有关数据库的代码都在模型中,视图在视图中,控制器中的代码行为。
在视图中,您只需要数据并将其显示在视图中,以及一些if语句。
很多PHP框架使用Codeigniter,Laravel,Symfony等MVC设计模式。他们使用模板视图来呈现视图。
答案 1 :(得分:1)
有关设计的全部内容:好的设计可以为您提供可维护的代码,并且可以减少应用程序中发生错误的可能性。 用spagetti编码文件练习PHP是可以的,但是当您需要编写现实生活中的应用程序时,应该考虑使用MVC framework(例如codeIgniter或laravel),这样您就可以轻松获得您的应用程序处于良好状态。
答案 2 :(得分:0)
要回答您的问题,一种流行的方法是使用输出缓冲和模板化。
例如,如果您在MVC框架的控制器中,则可以使用函数来选择模板并传递模板数据。
您将在控制器中收到一个请求。有人想访问联系页面。您将进行所需的任何检查(例如查看他们是否提交了表单,验证数据等),然后选择模板并向其传递任何必要的数据
// Controller
contact($request) {
if (empty($_POST)) {
inc('contact-form', ['title' => 'Contact Page'])
} else {
inc('contact-thank-you', ['title' => 'Thanks for submitting!']);
}
}
您将使用以下功能,从预设目录中选择模板,然后提取变量。这使它们可用于您的模板(不要提取$ _GET或$ _POST)
// Function to load template and output it
// Select a path and any variables
function inc($path, $variables, $print = true) {
$output = NULL;
$full_path = __DIR__ . "/views/{$path}.php";
if (file_exists($full_path)) {
// Extract variables
extract($variables);
// Output Buffer
ob_start();
// Include
include $full_path;
$output = ob_get_clean();
}
if ($print) {
print $output;
}
return $output;
}
// Inside templates/about.php
<main>
<header>
<h1>
<?= $title ?>
</h1>
</header>
</main>