最近应工作室要求学习PHP框架Laravel,接触到了MVC软件架构模式,即Model-View-Controller,这里我将使用Laravel框架介绍MVC架构模式,并且阐述自己对MVC软件架构浅薄的理解。

MVC架构简述:

由图所示,简单地理解MVC架构模式可以认为:

1.View(视图):是用户直接接触的界面,一般由前端处理,主要用来展示模型中的内容和用来输入表单数据。

2.Controller(控制器):主要用于处理视图和模型之间的逻辑关系,例如从视图中post的数据,到底如何进入模型并存入数据库中,我们是否应该对于用户的数据进行过滤以防止SQL注入等问题,又或者从数据库中取出的数据哪些应该展示在视图上,有什么判断标准,都需要控制器进行判断。

3.Model(模型):即底层同应用程序的接口,我们可以从Model中获取数据并进行处理。

以上是我对于MVC的一些理解,因为刚刚接触这种软件架构模式,所以理解不深,如果有兴趣者可以自行去深入了解。

以下给出MVC的一些友情链接:

维基百科

浅谈MVC、MVP和MVVM架构模式

Laravel实例:

接下来我将使用Laravel对于这一架构模式进行说明(Laravel只是媒介,这里不涉及Laravel语法细节):

假如说我们需要写一个登录界面那么我们使用MVC如何处理呢?

首先,我们需要一个登陆界面,这个登录界面是需要让用户看到的,并且在这个界面中,我们还需要让用户在登录界面中输入数据并且可以让控制器接收到,因此我们可以写html,php或者Laravel支持的blade模板,总之,不管使用哪种形式,最重要的是让用户有可视化界面并且实现登陆功能。

我用blade模板进行举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@extends("common.layout")
@section("title")
Login
@stop

@section("content")

<div class="xiao-container">
<div class="xiao-register-box">
<div class="xiao-title-box">
<span>登录</span>
</div>
<form action="{{url('at/save')}}" method="post">
{{csrf_field()}}
<div class="xiao-username-box">
<span class="xiao-require">*</span>
<label for="account">账户</label>
<div class="xiao-username-input">
<input type="text" id="account" name="account" placeholder="账户:"/>
</div>
</div>
<br/><br/>

<div class="xiao-userPassword-box">
<span class="xiao-require">*</span>
<label for="password">密码</label>
<div class="xiao-userPassword-input">
<input type="password" id="password" name="password" placeholder="密码:" />
</div>
</div>
<div class="xiao-submit-box">
<input id = "xiao-submit-button" type="submit" value="登录">
</div>
</form>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
</div>
</div>
@stop

我们无需管语法细节,只需要注意,我们在这里设计了一个表单,并且将方法设置为post,因此可以使控制器接收到数据,那么相应地,我们也需要设置相应的路由与控制器方法(路由是用户访问url所必需的)

路由:

1
2
Route::any('at/login',['uses' => 'StudentController@login']);
Route::any('at/save',["uses" => "StudentController@save"]);

控制器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class StudentController extends Controller
{
public function login()
{
return view('student.login');
}

public function save(Request $request)
{
$validate= $request->validate(
[
"account" => "required|string|max:20",
"password" => "required|string|max:20"
]
);
if($validate)
{
if($this->judge($request->input("account"),$request->input("password")))
{return true;}
return "账号不存在或密码不正确";
}
}

public function judge($account,$password)
{return Student::where("account",$account)->value('password')==$password;}
}

这样我们就可以了解到从登录界面post的数据,被控制器中的save的$request变量捕获了,并且将其进行了表单验证,我们需要进行两次验证,第一次验证用户输入是否合法,如果不合法,该方法将会重定向到登录页面要求你重新输入,否则的话,进行第二次验证,从Model里(我们在Model封装了数据库,这里不再展示)取出数据进行比对,如果账号密码都符合条件,就成功验证,否则会告诉你账号或密码输入不正确。

现在,我们就完成了最简单的MVC与User之间的交互模式。