程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 用 Composer構建自己的 PHP 框架之使用 ORM,composerorm

用 Composer構建自己的 PHP 框架之使用 ORM,composerorm

編輯:關於PHP編程

用 Composer構建自己的 PHP 框架之使用 ORM,composerorm


回顧

經過前三篇文章 基礎准備 、 構建路由 和 設計 MVC ,我們已經得到了一個結構比較完整的 MVC 架構的 PHP 微框架,但是距離一個真正能夠上手使用的框架還差一樣東西: 數據庫封裝 ,本篇就將講述如何集成一個 ORM Composer 包 。

本篇是本系列最後一篇,接下來我可能會以 讓我們開了又開的 Composer 包 為系列標題分享一些體驗和感悟,將主要發表在本站上。

正文

我們選擇 Laravel 的 illuminate/database 作為我們的 ORM 包。我試用了幾個著名的 ORM,發現還是 Laravel 的 Eloquent 好用!讓我們開心的 ORM,開了又開! :-D

在本系列教程裡,每一個 Composer 包都要滿足以下基本要求:

原生依賴 Composer 進行管理
在好用的基礎上盡量簡單(比如我們那個超簡單的路由包)
盡量新,用上 PHP 的新特性


說到 PHP 的新特性,有句題外話。 PHP5.3 引入了命名空間,這是規劃在 PHP6 中的功能,所以 PHP5.3 在一定程度上其實就是 PHP6 ,PHP 的下一個版本是 PHP7 ,即將發布,主要貢獻者是大名鼎鼎的 鳥哥 @Laruence 。另外本台前方記者(就是我)剛剛從微博發來報道,鳥哥正在放大招,制造傳說中 PHP7 on JIT ,我大 PHP 的歷史車輪是無法阻擋的哈哈哈!:-P

安裝 illuminate/database

給 composer.json 增加一個 require 項:

"illuminate/database": "*"
運行 composer update ,等待安裝完成。

使用 Eloquent

修改 public/index.php 為:

復制代碼 代碼如下:
<?php

use Illuminate\Database\Capsule\Manager as Capsule;

// Autoload 自動載入

require '../vendor/autoload.php';

// Eloquent ORM

$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'  => 'mffc',

  'username'  => 'root',

  'password'  => 'password',

  'charset'   => 'utf8',

  'collation' => 'utf8_general_ci',

  'prefix'    => ''

  ];

修改 models/Article.php :

復制代碼 代碼如下:
<?php

/**

* Article Model

*/

class Article extends Illuminate\Database\Eloquent\Model

{

  public $timestamps = false;

}
  

controllers/HomeController.php 無需改動。

刷新,頁面依舊:

恭喜你!Eloquent 使用成功!

Eloquent 更多用法

Eloquent 異常強大 ,可以說是 Laravel 中 最特別 、 最有價值 的部分。
像 HomeController 中調用的 Article::first() ,之前用了十幾行代碼,現在什麼都不用干,繼承一個類就行了。

Eloquent 更多用法參見:Eloquent ORM 中文文檔

其他著名 ORM

還有很多著名的 ORM 和 Datamapping(數據庫遷移等) 包,參見: ORM and Datamapping

ORM 能夠大幅提高提高開發效率,Eloquent 真乃神器也!
雖然 web 屆各語言陣營都在不斷推出新的所謂 快速開發框架 ,終歸還是越來越像 Rails 。Eloquent 在表面上幾乎是最像 Rails 的 ORM 的了,但是跟 Rails 不能比啊,Ruby 的超強面向對象特性可不是蓋的。Laravel 作者 Taylor Otwell 接受采訪時曾表示,Eloquent 是整個 Laravel 中最難實現的部分。我在調試的時候也發現, MFFC/vendor/illuminate/database/Illuminate/Database/Eloquent/Model.php 這個文件有 3000 多行......

目前建造一個豐滿的可以上手使用的 PHP 框架的工作就算是基本完成了,接下來我會繼續完善 MFFC 框架,讓她更加豐富、好用!

以後可能會有 模板引擎、表單驗證、發送郵件、權限體系管理、異步隊列、視頻音頻處理(亂入:-D) 等內容,敬請關注還未出世的 讓我們開了又開的 Composer 包 系列文章。

謝謝大家的閱讀和陪伴!再見!


PHP composer一些基本使用問題

問題一:為什麼一定把manager as capsule

因為命名太長,所以重命名一下,用起來方便

問題二:vendor下面得autoload.php得作用是什麼,不要說自動載入,我想知道得是如何載入得

require '../vendor/autoload.php';
這個文件的代碼看不到,所以我也不知道他干嘛的

問題三:bootEloquent()函數是什麼作用

沒看到在哪定義這個函數,所以無法判斷作用
 

php 的包管理,composer 有國內的鏡像

有的,國內全量鏡像有laravel框架項目組搭建的pkg.phpcomposer.com/
另外還有個代理:218.244.132.204/proxy/packagist 這個代理不可以使用composer的search和notice方法
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved