RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 987473
Accepted
Алексей
Алексей
Asked:2020-05-30 21:46:40 +0000 UTC2020-05-30 21:46:40 +0000 UTC 2020-05-30 21:46:40 +0000 UTC

这种情况下如何实现MVC PHP模型

  • 772

有一个代码:

<?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
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Ипатьев
    2020-06-03T16:17:43Z2020-06-03T16:17:43Z

    随着时间的推移,所有 PHP 用户都必须意识到一件事。无论语言在初始阶段看起来多么简单,编程一般都是一门科学,就像物理学或生物学一样。人们学习编程多年。

    是的,一些原始的东西可以通过在互联网上观看几个视频并在论坛上提出几个问题来即时获取。是的,一开始你已经习惯了一切都很简单的事实:你需要使用数据库吗?糟糕,这是视频。需要使用 HTML 吗?哎呀,教程来了。需要使用 MVC 吗?哎呀...

    但是您需要了解它只会在开始时很简单。还有一些话题是“手指上无法解释”的。大小有限的响应中根本没有足够的空间。特别是因为有这样一条规则:要理解答案,你必须已经知道大部分内容。

    为了避免毫无根据,我将列出将任何以经典意大利面条风格编写的脚本转换为 MVC 所需的内容:

    • 单个入口点(当不直接单独访问脚本,并且所有请求都由单个脚本处理时)
    • 路由器(根据请求确定哪个控制器将处理它的脚本)
    • 控制器(接受请求并将其转发给模型的代码)
    • 模型(它实现了实际的应用程序逻辑,我在这里写过)
    • View(负责 HTML 输出的组件)

    所有这一切将构成一个相当大的框架。作为 Stack Overflow 答案的一部分,根本不可能说出如何制作 MVC 框架。

    因此,我们暂时将MVC放在一边,分析一个更容易理解的概念——业务逻辑与表示的分离。

    这段代码的主要问题是它混合了数据库操作和数据输出。这是首先将它们分开的方法。

    • 获取所有数据不是在表格中间,而是提前,在任何输出开始之前
    • 在单独的文件中取出不同的显示页面,并通过include连接
    • 将html输出为html,而不是在php中回显
    • 出于对所有神圣事物的热爱,在每一行都写代码,而不是一次写一个

    这样,您的代码将更加紧凑和易于管理。

    作为一个单独的点,您需要将 Database 类扔进垃圾桶,并首先学习如何通过准备好的表达式使用 PDO 。

    一旦你完成了这些,你就可以沿着通往 MVC 的漫长道路前进。

    • 17
  2. Eugene Nagornichyh
    2020-06-07T18:36:24Z2020-06-07T18:36:24Z

    MVC是关于如何界定应用程序的架构。

    在您的示例中,您有一个粗体文件,这很糟糕,但是为什么呢?因为看你的代码的人要花大约一个小时调试和理解它是如何工作的,当你可以立即让每个人都清楚的时候,他为什么要调试你的代码,以便在读取函数或变量的名称时,很明显它确实如此。另一个例子,正如上面已经写过的,html 不存储在正在执行的逻辑中是一种不好的做法。再比如,当你必须在你的代码中添加一个新特性时(例如,你需要从第三方服务获取更多信息并显示在下面),你需要多长时间?以及如果明确哪个业务对象负责什么以及谁负责哪个领域需要多长时间,这样对代码的进一步支持不会消耗越来越多的时间,而是节省。

    那么,关于MVC,如何正确构建初始架构。

    让我们指出

    M - Model负责我们所有的业务逻辑,无论是对数据库的查询、对列表进行排序、在会话中存储数据、处理来自 $_GET $_POST 的数据。

    V - View负责显示 html。

    C - Controller负责管理所有这些,包括调用业务逻辑和将数据传递给视图

    例如,您可以尝试将这段巨大的代码拆分为文件夹结构中的不同文件:

    模型在 -应用程序/模型/

    控制器在 -应用程序/控制器/

    视图 -应用程序/视图/

    我试图解释我对 MVC 的看法,也许更有经验的人会有疑问,但我尽量不触及设计原则,用初学者可以理解的语言描述一切。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5