相关疑难解决方法(0)

在MVC中,您在哪里绘制控制器和模型之间的界限?

我已经看到代码编写,几乎所有非路由相关的代码都传递给模型.我还看到了代码,其中所有数据库持久性都由模型处理,但非DB处理由控制器处理.

哪种方法更好?

php model-view-controller

28
推荐指数
1
解决办法
1443
查看次数

输入验证在哪里属于MVC应用程序?

我有一个MVC应用程序从表单接收输入.
这是一个登录表单,因此唯一需要的验证是检查输入是否为非空.
在我将它传递给模型之前,我在控制器中验证它.
这是最佳做法吗?它属于模型吗?

language-agnostic model-view-controller controller model

23
推荐指数
2
解决办法
5982
查看次数

具体来说,属于模型,视图和控制器?

我一直在学习模型 - 视图 - 控制器范例("MVC"),但我很困惑,因为一些教程与其他教程相矛盾.

我目前对这个过程的理解看起来像这样:

路由器/调度员/前端控制器:

  • 虽然在"MVC"名称中没有特别引用,但路由器仍然是一个非常重要的部分.在这里,请求从原始URL转换为特定控制器.例如, www.StackUnderflow.com/question/123的请求路由到应用程序的"问题"控制器.

模型:

  • 这是从某些存储源(如数据库或XML文件)收集原始数据的位置.该模型用作抽象层,将Controller对特定数据请求转换为(例如)SQL查询,并将查询结果转换为标准格式(如数据对象).

  • 例如,在上面描述的/ browse/all场景中:

    • "问题"控制器将要求示范 "请给数据的问题123".
    • 然后,模型将其转换为"SELECT*FROM Questions WHERE Id = 123;" 并把它放到数据库中
    • 数据库将向模型返回"问题" 记录.
    • 模型将记录,并将其转换为问题数据对象
    • 模型然后要求做同样的事情"SELECT*FROM Answers WHERE QuestionID = 123;" 并从结果集中创建一个Answer对象数组,并将其添加到Question对象的answers成员变量中.
    • 模型将问题的对象返回到"问题"控制器.

控制器:

  • 这是该应用程序的真正主力.除了在模型视图中来回传递消息之外,Controller还负责授权等事务和应用程序/"业务"逻辑编辑:每个答案,业务逻辑属于模型.

  • 在正在进行的示例中,Controller将负责:

    • 确保用户已登录.
    • 从URL确定QuestionId.
    • 确定要使用的视图.
    • 发送HTTP代码并根据需要重定向.
    • 模型请求数据,并将所需数据存储在成员变量中.

视图:

  • 总的来说,View是应用程序中最简单的部分.它主要包含HTML模板的基本应用程序.这些模板将具有占位符,以便从Controller的成员变量中将数据插入到模板中:

例如

<html>

  <head>
    <title>
      <?php $question->getTitle() ?>
    </title>
  </head> …
Run Code Online (Sandbox Code Playgroud)

model-view-controller design-patterns application-design

10
推荐指数
1
解决办法
1481
查看次数

MVC - 在哪里实现表单验证(服务器端)?

在编码传统的MVC应用程序时,编写服务器端表单验证的最佳实践是什么?代码是属于控制器还是模型层?为什么?

forms validation model-view-controller

9
推荐指数
1
解决办法
1842
查看次数

我可以从视图中调用模型吗?

而不是使用完整的PHP MVC,我正在设计一个最适合我的用途.我已经完成了基本框架,并编写了运行我的网站所需的模型和控制器.

现在我正在转向观点,我遇到了一个小困境.我的方法对我来说很好,但是为了将来的参考,我想知道我正在做的是一个坏习惯.

我正在做的事情:

在我的视图中,我正在调用运行我的身份验证系统的模型,并请求用户的登录状态.然后我使用该布尔值来决定是否在视图中显示某些元素,以及在何处放置其他元素.

我应该为每个登录状态设计单独的视图,还是这种方法很好?但是,如果我要将这个MVC应用到我正在为我的客户做的工作中,我需要使用最佳实践.

任何意见,将不胜感激!

php model-view-controller

6
推荐指数
2
解决办法
4918
查看次数

模型应该有多复杂?

使用MVC模式实现模型时,我的模型应该有多复杂?

假设我有几个这样的表:

  • 用户(id,密码,已创建...)
  • 电子邮件(user_id,电子邮件......)
  • 地址(user_id,地址......)

我有一个名为UserController的控制器.该控制器应该允许我登录用户,创建用户等.

<!-- language: php -->
class UserController{

    public function create($array){
        ...
    }

    public function login($email, $password){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的模型应该非常原始,只通过ORM实现CRUD操作吗?这将导致代码如下:

<!-- language: php -->
class UserController{

    public function create($array){
        $userModel->username = 'blah';
        $userModel->blah = 'blah';
        $id = $userModel->save();

        $emailModel->id = $id;
        $emailModel->email = "emailhere";
        $emailModel->save();

        //Do the same for addresses
    }

    public function login($email, $password){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,或者,我可以使用更复杂的模型:

<!-- language: php -->
UserModel{
    public function login($email, $password){
        //Do the joining and checking here, then …
Run Code Online (Sandbox Code Playgroud)

php model-view-controller orm crud models

5
推荐指数
1
解决办法
381
查看次数

MVC 和程序状态 - 模型应该是愚蠢的吗?

我正在使用一个使用 MVC 范例的框架。它是 CodeIgniter,但我的问题并不是专门针对该框架 - 更普遍的是关于使用 MVC 时的最佳实践。

我使用 $_SESSION 变量来维护一些状态变量(用户选择、一些临时首选项、一些数据过滤选项)。这很容易做到,但我发现我在模型和控制器之间分割了这些变量的使用。有时我会更新控制器中的一个,并在模型中查找它。这开始“闻起来”很有趣,因为我突然想到让模型“意识到”所有这些设置可能不是一个好主意。模型不应该只接受获取/操作数据的请求,并且只关心请求中明确的内容(而不必查找外部变量)吗?

下面是一个示例: 我有一个名为 $_SESSION['regionFilter'] 的会话变量。这是在控制器中创建和更新的,代表用户想要“向下钻取”的销售区域。当控制器从模型请求一些数据时,我当前让模型查找 $_SESSION['regionFilter'] 变量,并在为数据库创建 SQL 时使用它。似乎让模型在程序状态方面变得“哑”,并且让控制器以某种方式将 $_SESSION['regionFilter'] 变量捆绑到其请求中(如果需要的话)可能更有意义。

有什么想法吗?谢谢!


编辑: 谢谢大家的讨论。我知道重叠的问题,但很难找到有关该主题的一般性讨论 - 我搜索“MVC 模型程序状态”时发现了许多有关 ASP.NET-MVC 特定讨论的问题,这些问题在实现中陷入困境细节。

我已将问题标记为已关闭。再次感谢您的想法!

php model-view-controller paradigms session-variables

1
推荐指数
1
解决办法
788
查看次数