Home  >  Article  >  php教程  >  用 Composer构建自己的 PHP 框架之设计 MVC

用 Composer构建自己的 PHP 框架之设计 MVC

WBOY
WBOYOriginal
2016-06-06 20:18:561733browse

几乎所有人都是通过学习某个框架来了解 MVC 的,这样可能框架用的很熟,一旦离了框架一个简单的页面都写不了,更不要说自己设计 MVC 架构了,其实这里面也没有那

回顾

在上一篇教程中,我们使用 codingbean/macaw 这个 Composer 包构建了两条简单路由,第一条是响应 GET ‘/fuck' 的,另一条会 hold 住所有请求。其实对 PHP 框架来说,有了路由就有了一切。所以接下来我们要做的事情就是让 MFFC 框架更加规范,更加丰满。

这就牵扯到了 PHP 框架另外的价值:确立开发规范以便于`多人协作`,使用 ORM`、`模板引擎 等工具以`提高开发效率`。

正式开始规划文件夹

新建 MFFC/app 文件夹,在 app 中创建 controllers、models、views 三个文件夹,开始正式开始踏上 MVC 的征程。

(谁说我抄 Laravel 了,我抄的明明是 Rails :-D)

使用命名空间

新建 controllers/BaseController.php 文件:

/**
* BaseController
*/
class BaseController
{
 
  public function __construct()
  {
  }
}

新建 controllers/HomeController.php 文件:

* \HomeController
*/
class HomeController extends BaseController
{
 
  public function home()
  {
    echo "

控制器成功!

";
  }
}

增加一条路由: Macaw::get('', 'HomeController@home');`,打开浏览器直接访问 :81/`,出现以下提示:

Fatal error: Class 'HomeController' not found in /Library/WebServer/Documents/wwwroot/MFFC/vendor/codingbean/macaw/Macaw.php on line 93

为什么没找到 HomeController 类?因为我们没有让他自动加载,修改 composer.json 为:

{
  "require": {
    "codingbean/macaw": "dev-master"
  },
  "autoload": {
    "classmap": [
      "app/controllers",
      "app/models"
    ]
  }
}

运行 composer dump-autoload`,稍等片刻,刷新,你将看到以下内容(别忘了调节编码哦~):


恭喜你,命名空间使用成功!

连接数据库

新建 models/Article.php 文件,内容为(数据库密码请自行更改):

/**
* Article Model
*/
class Article
{
  public static function first()
  {
    $connection = mysql_connect("localhost","root","password");
    if (!$connection) {
      die('Could not connect: ' . mysql_error());
    }     mysql_set_charset("UTF8", $connection);     mysql_select_db("mffc", $connection);     $result = mysql_query("SELECT * FROM articles limit 0,1");     if ($row = mysql_fetch_array($result)) {
      echo '

'.$row["title"].'

';
      echo '

'.$row["content"].'

';
    }     mysql_close($connection);
  }
}

修改 controllers/HomeController.php 文件:

刷新,这时候会得到 Article 类未找到的信息,因为我们没有更新自动加载配置: composer dump-autoload

在等待的时间里,我们去建立数据库 mffc`,在里面建立表 articles`,设计两个字段 title`、`content 用于记录信息,并填充进至少一条数据。你也可以在建立完成 mffc 数据库以后运行以下 SQL 语句:

DROP TABLE IF EXISTS `articles`;
CREATE TABLE `articles` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` longtext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `articles` WRITE;
/*!40000 ALTER TABLE `articles` DISABLE KEYS */;
INSERT INTO `articles` (`id`, `title`, `content`)
VALUES
 (1,'我是标题','

我是内容呀~~

我真的是内容,不信算了,哼~ O(∩_∩)O

'),
 (2,'我是标题','

我是内容呀~~

我真的是内容,不信算了,哼~ O(∩_∩)O

');
/*!40000 ALTER TABLE `articles` ENABLE KEYS */;
UNLOCK TABLES;

然后,刷新!你将看到以下页面:


恭喜你!MVC 中的 M 和 C 都已经实现!接下来我们开始调用 V (视图)。

调用视图

修改 models/Article.php 为:

/**
* Article Model
*/
class Article
{
  public static function first()
  {
    $connection = mysql_connect("localhost","root","C4F075C4");
    if (!$connection) {
      die('Could not connect: ' . mysql_error());
    }
    mysql_set_charset("UTF8", $connection);
    mysql_select_db("mffc", $connection);
    $result = mysql_query("SELECT * FROM articles limit 0,1");
    if ($row = mysql_fetch_array($result)) {
      return $row;
    }
    mysql_close($connection);
  }
}
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn