作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在没有任何框架的情况下将简单的 MVC 模式应用于我当前的网站。因为我还没有真正进入 oop,但我目前仍在使用过程。
我有一个简单的登录表单( View )
<form action="controller/login.php" method="Post">
<input type="text" name="username" placeholder="Username" />
<input type="text" name="password" placeholder="Password" />
<input type="submit" value="Sign in" />
</form>
此表单将提交给登录表单的 Controller 。 Controller 现在将检查两个字段是否都有输入并或多或少地“清理”输入
if(isset($_POST['username'])){
$username = $_POST['username'];
$password = $_POST['password'];
$username_escape = mysqli_real_escape_string($connect, $username);
$password_escape = mysqli_real_escape_string($connect, $password);
}
header("../model/login.php");
现在这是一个非常简单的检查,但是我现在想知道我应该将 Controller 包含到模型中并从 Controller 重定向到模型,还是首先提交表单并包含 Controller 。
模型
include_once("../controller/login.php");
$query = mysqli_query($connect, "INSERT into DB_table (username, password)
VALUES($username_escape, $password_escape)");
最佳答案
尝试分离您的关注点很好,但 MVC 是一种基于 OOP 原则的设计模式。
OOP 与对象一起工作,这些对象由一个类定义,就像一个蓝图。
所以在这个例子中,你希望一切都通过 Controller ,然后根据你是否想要保存,你想要调用模型。
例如。
class LoginController
{
public function indexAction()
{
$username = $_POST['username'];
$password = $_POST['password'];
if(!is_null($username) AND !is_null($password))
{
$user = new \Service\User();
$credentialsAreValid = $user->checkCredentials($username, $password);
if($credentialsAreValid)
{
header("Redirect: Somewhere");
}
}
require_once __DIR__."/../templates/login.php";
}
}
class User
{
public function checkCredentials($username, $password)
{
$dsn = "mysql:host=localhost;dbname=db";
$dbuser = "root";
$dbpass = "pass";
$db = new PDO($dsn, $dbuser, $dbpass);
$sth = $db->prepare("SELECT * FROM user WHERE username = ? AND password = ?");
$sth->bindValue(1, $username);
$sth->bindValue(2, $password);
$sth->execute();
if(count($sth->fetchAll())>0) return true;
return false;
}
}
如您所见,逻辑被分离到一个服务中,并且仅在需要时调用。我们还使用 PDO 来防止 SQL 注入(inject),(尽管实际上不应该在这里创建对象)。
我建议您研究一下自动加载,并尝试使用像 Silex 这样的框架,因为它会教给您这些原则。
关于php - MVC - 将表单提交给 Controller 或模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712034/
我是一名优秀的程序员,十分优秀!