PHP MVC开发框架学习

前言

通过学习MVC能够更深的了解一些mvc框架

MVC 思想

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。

视图:视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型:模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。

单一入口

单一入口通常是指一个项目或者应用具有一个统一(但并不一定是唯一)的入口文件,也就是说项目的所有功能操作都是通过这个入口文件进行的,并且往往入口文件是第一步被执行的。

单一入口的好处是项目整体比较规范,因为同一个入口,往往其不同操作之间具有相同的规则。另外一个方面就是单一入口带来的好处是控制较为灵活,因为拦截方便了,类似如一些权限控制、用户登录方面的判断和操作可以统一处理了。

或者有些人会担心所有网站都通过一个入口文件进行访问,是否会造成太大的压力,其实这是杞人忧天的想法。

现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

一个典型的Web MVC流程:

Controller截获用户发出的请求;
Controller调用Model完成状态的读写操作;
Controller把数据传递给View;
View渲染最终结果并呈献给用户。

代码规范

MySQL的表名需小写或小写加下划线,如:item,car_orders。
模块名(Models)需用大驼峰命名法,即首字母大写,并在名称后添加Model,如:ItemModel,CarModel。
控制器(Controllers)需用大驼峰命名法,即首字母大写,并在名称后添加Controller,如:ItemController,CarController。
方法名(Action)需用小驼峰命名法,即首字母小写,如:index,indexPost。
视图(Views)部署结构为控制器名/行为名,如:item/view.php,car/buy.php。

对于只有 PHP 代码的文件,最好没有结束标志?>,
PHP自身并不需要结束符号,不加结束符让程序更加安全,很大程度防止了末尾被注入额外的内容。

请求URL
ocalhost/index.php?c=demo&a=index¶m=welcome

如果想得到更加优美的URL结构,可以进行优化,为由这URL结构优化与本文关系不大,以后进行分享。

从上面的参数可以看出,访问的文件是index.php,同时含有3个参数分别为c、a、param。

MVC实现

首先来实现一个简单的MVC

 ├─www                       # 网站根目录
 │  ├─controller             # 控制器目录
 │  │  ├─democontroller.php  # demo控制器
 │  ├─model                  # 模型目录
 │  │  ├─model.php           # model模型
 │  ├─view                   # 视图目录
 │  │  ├─index.php           # index视图
 │  ├─index.php              # 入口文件

/index.php

<?php
require('controller/democontroller.php');
$controller = new DemoController();
$controller->index();

controller/democontroller.php

<?php

class DemoController{
  public function index(){
    echo "hello world";
  }
}

访问127.0.0.1/index.php

如果使用下面的URL进行访问,可以预见不会有任何输出。
访问http://localhost/controller/democontroller.php

只能通过index.php来访问,这也是为什么称它为入口文件的原因
现在来通过参数来调用不同的控制器
接下来改写index.php内容

<?php

 $c_str = $_GET['c'];  // 获取控制器
 $c_name = $c_str.'controller';
 $c_path = 'controller/'.$c_name.'.php';

 $method = $_GET['a']; //方法名
 require($c_path);

 $controller = new $c_name;
 $controller->$method();

访问
http://localhost/index.php?c=demo&a=index
同样能够得到内容

接下来加入view,使用视图对象处理输出
view/index.php

<?php


 class Index {
     public function display($output) {

         echo $output;
     }
 }


<?php

// controller/democontroller.php
class DemoController
{

    public function index()
    {
    $data = 'Hello furzoom!';
    //echo 'hello world';
    require('view/index.php');
    $view = new Index();
    $view->display($data);
    }
}


访问 http://localhost/index.php?c=demo&a=index

上面貌似已经很cool了,但是显示什么样的内容是在控制器中直接指定的,希望内容也由URL指定,这样将数据的处理交给模型来处理。
model/model.php

<?php
// model/model.php

class Model{
  private $data = array(
    'title' => 'Hello style',
    'key' => 'welcome to style-404.github.io',
  );
  public function getData($key){
    return $this ->data[$key];
  }
}

视图文件model.php定义了一个Model类,类中定义了一个getData()的方法,用于返回请求的数据。

同时修改入口文件index.php如下:

<?php

 $c_str = $_GET['c'];  // 获取控制器
 $c_name = $c_str.'controller';
 $c_path = 'controller/'.$c_name.'.php';

 $method = $_GET['a']; //方法名
 require($c_path);

$param = $_GET['param']; // 增加参数

 $controller = new $c_name;
 $controller->$method($param);

增加了一个参数$param,将其作为控制器的方法调用参数。

还需要修改控制器的方法根据不同参数取得不同的数据。
// controller/democontroller.php

<?php

// controller/democontroller.php
class DemoController
{

    function index($param)
    {
    // echo 'hello world';
    require('view/index.php');
    require('model/model.php');
    $model = new Model();
    $view = new Index();
    $data = $model->getData($this->$param);
    $view->display($data);
    }
}

访问
http://localhost/index.php?c=demo&a=index&param=key

成功~

参考

https://www.awaimai.com/128.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为高级PHP开发工程师,你需要掌握以下技能和知识: 1. 基础知识: - PHP语言基础:了解PHP的基本语法、数据类型、流程控制、函数等。 - Web开发基础:HTML、CSS、JavaScript等前端技术,以及HTTP协议和基本的前后端交互原理。 2. 数据库: - MySQL:掌握SQL语法、数据库设计原则、常见查询优化方法。 - NoSQL数据库:如MongoDB、Redis等的基本使用和应用场景。 3. 框架: - Laravel:学习使用Laravel框架进行快速开发,熟悉其核心特性、路由、模型、视图等。 - Yii或Symfony:了解其他主流PHP框架,扩展自己的工具箱。 4. 缓存和性能优化: - 掌握Redis等缓存技术的基本概念和使用方法,加速数据访问。 - 理解性能优化的常用手段,如数据库索引优化、代码优化、查询分析等。 5. 安全性: - 学习常见的Web安全漏洞和攻击方式,如SQL注入、跨站脚本攻击(XSS)等。 - 掌握常用的安全防护措施,如输入验证、数据过滤、密码加密等。 6. 设计模式和架构: - 了解常见的设计模式,如单例模式、工厂模式等,应用到实际开发中。 - 学习软件架构的基本原则,如MVC、RESTful等。 7. 版本管理和协作工具: - 掌握Git等版本管理工具的基本使用,了解分支管理、合并等常用操作。 - 理解团队协作的重要性,掌握项目管理工具,如Jira、Trello等。 8. 其他技能: - 掌握Linux操作系统的基本命令,熟悉服务器部署和运维相关知识。 - 学习容器化技术,如Docker,便于开发环境搭建和项目部署。 - 持续集成和持续交付(CI/CD)的基本概念和实践。 除了以上技能和知识,持续学习和保持对新技术的关注也很重要。阅读相关的技术文档、参与开源社区、参加技术交流活动都有助于拓宽视野和提升技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值