有一个代码:
<?php
session_start();
if($_SESSION['hgi4gfus83br6G7kihk'])
{
?>
<!DOCTYPE HTML>
<html>
<?php include_once('blocks/bootstrap_header.php'); ?>
<body>
<?php include_once('blocks/menu.php'); ?>
<?php
session_start();
if ($_SESSION['hgi4gfus83br6G7kihk'])
{
include_once ('function.php');
$db = new Database;
$scan = new Scan;
if (isset($_POST['submit']))
{
unset($_POST['submit']);
$db->update('offices', $_POST, 'id_office = ' . $_GET['id']);
header("Location: info.php?city=" . $_GET['city'] . "&id=" . $_GET['id']);
}
if (isset($_GET['city']) && isset($_GET['id']) && isset($_GET['edit']))
{
echo '<form name="office" method="post">';
echo '<table class="table">';
foreach($db->select('offices', '*', '', "city_office='" . $_GET['city'] . "' AND " . "id_office=" . $_GET['id']) as $key => $value)
{
foreach($value as $key2 => $value2)
{
echo '<tr>';
echo '<td>' . $key2 . '</td><td><input type="text" name="' . $key2 . '" value="' . $value2 . '"></td>';
echo '</tr>';
}
}
echo '<tr>';
echo '<td><input type="submit" name="submit" value="Записать"></td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
elseif (isset($_GET['city']))
{
if (isset($_GET['id']))
{
echo '<table class="table">';
echo '<tr>';
echo '<th scope="col">Адрес</th>';
echo '<th scope="col">Код</th>';
echo '<th scope="col">Ноутбук</th>';
//echo '<th scope="col">Teamviewer</th>';
echo '<th scope="col">Mikrotik</th>';
echo '<th scope="col">IP адрес</th>';
echo '<th scope="col">VNCFA</th>';
echo '<th scope="col">VNCVO</th>';
echo '<th scope="col">VNCA</th>';
echo '<th scope="col">Телефон</th>';
echo '</tr>';
foreach($db->select('offices', '*', '', "city_office='" . $_GET['city'] . "' AND " . "id_office=" . $_GET['id']) as $value)
{
echo '<td>' . '<a class="first" href="http://' . substr_replace($value['ip_office'], 10, -1) . ':5901" target="_blank">' . $value['type_street_office'] . ' ' . $value['street_office'] . ' ' . 'дом' . ' ' . $value['house_office'] . '</a></td>';
echo '<td>' . $value['code_office'] . '</td>';
echo '<td>' . $value['pwd_notebook_office'] . '</td>';
//echo '<td>' . $value['pwd_teamviewer_office'] . '</td>';
echo '<td>' . $value['pwd_mikrotik_office'] . '</td>';
echo '<td>' . '<a href="http://' . $value['ip_office'] . '" target="_blank">' . $value['ip_office'] . '</a></td>';
echo '<td>' . $value['pwd_vnc_full_acces_office'] . '</td>';
echo '<td>' . $value['pwd_vnc_view_only_office'] . '</td>';
echo '<td>' . $value['pwd_vnc_administrator_office'] . '</td>';
echo '<td>' . $value['telephone_office'] . '</td>';
echo '<a class="btn btn-primary" href="info.php?city=' . $_GET['city'] . '&id=' . $_GET['id'] . '&edit=true" role="button">Изменить</a>';
}
echo "</table>";
if(isset($_POST['add'])){
unset($_POST['add']);
$db->insert('logs_offices', $_POST);
}
echo '<form class="form-inline" method="post">';
echo '<div class="form-group mb-2">';
echo '<input type="hidden" value="' . $_GET['id'] . '" name="id_office_log_office">';
echo '<input class="form-control" type="text" name="text_log_office">';
echo '<button type="submit" class="btn btn-primary" name="add" >Добавить комментарий</button>';
echo '</div>';
echo '</form>';
echo '<table class="table">';
echo '<thead>';
echo '<tr>';
echo '<th scope="col">Коментарий</th>';
echo '<th scope="col">Время</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
foreach ($db->select('offices, logs_offices', '*', '', 'id_office="' . $_GET['id'] . '" AND id_office_log_office=' . $_GET['id'], 'datetime_log_office DESC') as $val)
{
echo '<tr>';
echo '<td>' . $val['text_log_office'] . '</td>';
echo '<td>' . $val['datetime_log_office'] . '</td>';
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
}
else
{
echo '<table class="table">';
echo '<tr>';
echo '<th scope="col">Номер отделения</th>';
echo '<th scope="col">Адрес</th>';
echo '<th scope="col">Телефон</th>';
echo '</tr>';
foreach($db->select('offices', '*', '', "city_office='" . $_GET['city'] . "'") as $value)
{
echo '<tr>';
echo '<td>' . $value['number_office'] . '</td>';
echo '<td>' . '<a class="first" href="info.php?city=' . $value['city_office'] . '&id=' . $value['id_office'] . '">' . $value['type_street_office'] . ' ' . $value['street_office'] . ' ' . 'дом' . ' ' . $value['house_office'] . '</a></td>';
echo '<td>' . $value['telephone_office'] . '</td>';
echo '</tr>';
}
echo "</table>";
}
}
else
{
echo '<table class="table">';
echo '<tr>';
echo '<th scope="col">Город</th>';
echo '</tr>';
foreach($db->select('offices', '*', '', '', 'city_office') as $value)
{
echo '<tr>';
echo '<td><a href="info.php?city=' . $value['city_office'] . '">' . $value['city_office'] . '</a></td>';
echo '</tr>';
}
echo "</table>";
}
}
else
{
header("Location: index.php");
exit;
}
?>
</body>
</html>
<?php
}
else
{
header("Location: index.php");
}
?>
此代码执行以下任务。授权后,我进入某个页面,在该页面中可以看到城市列表。通过点击城市,我看到一个分支列表,通过点击一个分支,我看到这个分支的数据。现在我着手更改设计并将其绑定到引导网格,但我之前编写的代码结果很糟糕。由于我无法理解 MVC 的原理并应用它们,问题变得更加严重。因此,得到这样的粥。如何根据 MVC 设计模式来构建它?提前感谢您的帮助。如果你能用手指向我解释这个模式在这个例子中是如何应用的,那么一般来说你不会得到一个价格:)
随着时间的推移,所有 PHP 用户都必须意识到一件事。无论语言在初始阶段看起来多么简单,编程一般都是一门科学,就像物理学或生物学一样。人们学习编程多年。
是的,一些原始的东西可以通过在互联网上观看几个视频并在论坛上提出几个问题来即时获取。是的,一开始你已经习惯了一切都很简单的事实:你需要使用数据库吗?糟糕,这是视频。需要使用 HTML 吗?哎呀,教程来了。需要使用 MVC 吗?哎呀...
但是您需要了解它只会在开始时很简单。还有一些话题是“手指上无法解释”的。大小有限的响应中根本没有足够的空间。特别是因为有这样一条规则:要理解答案,你必须已经知道大部分内容。
为了避免毫无根据,我将列出将任何以经典意大利面条风格编写的脚本转换为 MVC 所需的内容:
所有这一切将构成一个相当大的框架。作为 Stack Overflow 答案的一部分,根本不可能说出如何制作 MVC 框架。
因此,我们暂时将MVC放在一边,分析一个更容易理解的概念——业务逻辑与表示的分离。
这段代码的主要问题是它混合了数据库操作和数据输出。这是首先将它们分开的方法。
这样,您的代码将更加紧凑和易于管理。
作为一个单独的点,您需要将 Database 类扔进垃圾桶,并首先学习如何通过准备好的表达式使用 PDO 。
一旦你完成了这些,你就可以沿着通往 MVC 的漫长道路前进。
MVC是关于如何界定应用程序的架构。
在您的示例中,您有一个粗体文件,这很糟糕,但是为什么呢?因为看你的代码的人要花大约一个小时调试和理解它是如何工作的,当你可以立即让每个人都清楚的时候,他为什么要调试你的代码,以便在读取函数或变量的名称时,很明显它确实如此。另一个例子,正如上面已经写过的,html 不存储在正在执行的逻辑中是一种不好的做法。再比如,当你必须在你的代码中添加一个新特性时(例如,你需要从第三方服务获取更多信息并显示在下面),你需要多长时间?以及如果明确哪个业务对象负责什么以及谁负责哪个领域需要多长时间,这样对代码的进一步支持不会消耗越来越多的时间,而是节省。
那么,关于MVC,如何正确构建初始架构。
让我们指出
M - Model负责我们所有的业务逻辑,无论是对数据库的查询、对列表进行排序、在会话中存储数据、处理来自 $_GET $_POST 的数据。
V - View负责显示 html。
C - Controller负责管理所有这些,包括调用业务逻辑和将数据传递给视图
例如,您可以尝试将这段巨大的代码拆分为文件夹结构中的不同文件:
模型在 -应用程序/模型/
控制器在 -应用程序/控制器/
视图 -应用程序/视图/
我试图解释我对 MVC 的看法,也许更有经验的人会有疑问,但我尽量不触及设计原则,用初学者可以理解的语言描述一切。