利用composer构建MVC框架详解编程语言

1.基础准备

新建文件夹test,在文件夹下新建文件 composer.json:

{ 
  "require": { 
  } 
}

命令行切换到 test 目录下,运行:

composer update

出现文件夹vendor,Composer 初始化成功!

 2.构建路由

框架的本质就是路由

开始自己来构建路由,先去 GitHub 搜一下:点此查看搜索结果

使用noahbuscher/Macaw

更改 composer.json:

{ 
  "require": { 
    "noahbuscher/macaw": "dev-master" 
  } 
}

运行 composer update,test/vender得到目录noahbuscher,Macaw 包安装成功!

新建test/web 文件夹,这个文件夹将是用户唯一可见的部分。在文件夹下新建 index.php 文件:

<?php 
    //自动载入 
    require '../vendor/autoload.php'; 
    //路由配置 
    require '../config/routes.php'; 
?>

新建 test/config 文件夹,在里面新建 routs.php 文件

<?php 
  use /NoahBuscher/Macaw/Macaw; 
  Macaw::get('/', function() { 
    echo 'Hello world!'; 
  }); 
  Macaw::get('(:all)', function($fu) { 
    echo '未匹配到路由<br>'.$fu; 
  }); 
  Macaw::dispatch(); 
?>

在地址栏,输入127.0.0.1/test/web/

出现Hello world!

3.设计MVC

新建 test/app 文件夹,在 app 中创建 controllers、models、views 三个文件夹,开始正式开始MVC 

(1)Controller

新建 controllers/BaseController.php 文件:

<?php 
/** 
* BaseController 
*/ 
class BaseController 
{ 
  public function __construct() 
  { 
  } 
}

新建 controllers/HomeController.php 文件:

<?php 
/** 
* /HomeController 
*/ 
class HomeController extends BaseController 
{ 
  public function home() 
  { 
    echo "<h1>控制器成功!</h1>"; 
  } 
}

rotues.php中添加一条路由,Macaw::get(‘/’, [email protected]‘);

运行 composer dump-autoload 

刷新

(2)Model

新建 models/Article.php 文件

<?php 
    error_reporting(E_ALL ^ E_DEPRECATED); 
    class Article{     
        public static function first(){ 
        $connection=mysql_connect("localhost",'root','root'); 
            if(!$connection){ 
                die('Could not connect:'.mysql_error()); 
            } 
            mysql_set_charset("UTF8",$connection); 
            mysql_select_db("lulucms",$connection); 
            $result=mysql_query("select * from yii_page limit 0,1"); 
            if($row=mysql_fetch_array($result)){ 
                echo '<h1>'.$row['title'].'</h1>'; 
                echo '<p>'.$row['summary'].'</p>'; 
            } 
            mysql_close($connection); 
        } 
    } 
?>            

修改controllers/HomeController.php 文件:

<?php 
    class HomeController extends BaseController{ 
        public function home(){ 
            Article::first(); 
        } 
    } 
?>
运行composer dump-autoload
刷新

(3)View

修改 models/Article.php 为:

<?php 
    error_reporting(E_ALL ^ E_DEPRECATED); 
    class Article{     
        public static function first(){ 
            $connection=mysql_connect("localhost",'root','root'); 
            if(!$connection){ 
                die('Could not connect:'.mysql_error()); 
            } 
            mysql_set_charset("UTF8",$connection); 
            mysql_select_db("lulucms",$connection); 
            $result=mysql_query("select * from yii_page limit 0,1"); 
            if($row=mysql_fetch_array($result)){ 
                return $row; 
            } 
            mysql_close($connection); 
        } 
    } 
?>    

修改 HomeController:

<?php 
    class HomeController extends BaseController{ 
        public function home(){ 
            $row=Article::first(); 
            require dirname(__FILE__).'/../views/home.php'; 
        } 
    } 
?>

新建 views/home.php 文件

<?php 
  echo '<h1>'.$row['title'].'</h1>'; 
  echo '<p>'.$row['summary'].'</p>'; 
?>

刷新

MVC构造完成

 4.数据库封装–使用ORM 包

 使用Laravel 的 Eloquent 

 安装 illuminate/database

 给 composer.json 增加一个 require 项

"illuminate/database": "*"

修改 web/index.php 

<?php 
    use Illuminate/Database/Capsule/Manager as Capsule; 
    //自动载入 
    require '../vendor/autoload.php'; 
    // 
    $capsule=new Capsule; 
    $capsule->addConnection(require '../config/database.php'); 
    $capsule->bootEloquent(); 
    //路由配置 
    require '../config/routes.php'; 
?>

新增 config/database.php

<?php 
    return [ 
        'driver'=>'mysql', 
        'host'=>'localhost', 
        'database'=>'lulucms', 
        'username'=>'root', 
        'password'=>'root', 
        'charset'=>'utf8', 
        'collation'=>'utf8_general_ci', 
        'prefix'=>'yii_' 
    ]; 
?>

修改 models/Article.php 

<?php 
    class Article extends Illuminate/Database/Eloquent/Model{ 
        public $timestamps=false; 
        protected $table = 'page'; 
    } 
?>

controllers/HomeController.php 无需改动

刷新

框架构造完成

Eloquent ORM 中文文档

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20423.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论