一個很簡單的PHP框架lyue

lookyourface發表於2020-11-13

####
專案空閒了兩天就寫了一下,目前只粗略寫了一半,很多功能還確實後續慢慢完善。
github地址 lyue

lyue,一個輕量級的php restful api開發框架

1、安裝

git clone git@github.com:linyuee/lyue.git

到專案根目錄執行依賴安裝

composer install

2、目錄結構

lyue
 -app                --邏輯程式碼
 -Console        --命令列程式碼
 -Controller     --控制器
 -Exception      --異常捕獲處理
 -Model          --模型層
 -config             --配置
 -public             --框架入口
 -route              --路由
 -storage            --檔案儲存
 -vender             --擴充套件包

框架的核心內容打包成composer包lyue/framework,框架依賴於該包

3、核心

1、服務容器

框架一開始會初始化一個Application類,這個類便是框架核心類,繼承與容伺服器類Container類。
服務容器是一個用於管理類依賴和執行依賴注入的強大工具,我們在框架啟動的時候將框架所需的型別繫結到容器中去,然後解析出來使用。
使用singleton方法將類繫結到容器中,型別是單例。這樣我們管理服務模組、實現依賴注入這些問題全都交給容器來做就好了。我們想要
什麼樣的服務,就向容器中新增,在需要使用的時候,就利用容器解析使用就可以了。

2、門面

Facades 為應用的 IoC 服務容器 的類提供了一個靜態的介面。實現內部僅僅定義了一個 getFacadeAccessor 方法,該方法返回了一個註冊
元件的,當呼叫該門面類不存在的靜態方法時,會觸發門面的__callStatic方法

 public static function __callstatic($method, $arg) { $instance = static::getInstance(static::getFacadeAccessor(), $arg); return call_user_func_array(array($instance, $method), $arg); }```
然後便會呼叫門面的靜態方法getInstance,該方法會嘗試沖服務容器中獲取例項,如果獲取不到則會建立該例項
```$xslt
public static function getInstance($classname, $args)
 { $obj = Application::getInstance()->make($classname); if (!empty($obj)) { return $obj; } return new $classname($args); }```
於是,你邊可以在控制器裡面輕鬆愉快地使用門面類了
```$xslt
\Lyue\Facades\Log::info('123');

3、路由

路由檔案再route資料夾下面的api.php檔案

Lyue\Route\Router::where('name', '[a-z]+')
 ->where('id', '\d{1,2}') // ->prefix("admin") ->namespace("Api") ->group(function (Lyue\Route\Router $router) { Lyue\Route\Router::get('dashboard', 'DashboardController@index'); Lyue\Route\Router::prefix("api") ->group(function () { Lyue\Route\Router::post('test', 'TestController@test'); }); });```

#### 4ORM
首先在配置檔案config/database.php填寫資料庫資訊
然後命令列執行
```$xslt
php rookie create:models

便會在app/Models資料夾下面生成改資料庫的表對應的model類了
在控制器中根據model類來操作對應的資料庫

 $res = DB::table('user')->select(['id','phone','status'])->get(); $res->each(function($item){ $item->status = $item->status == 1?'正常':'異常';
 }); return $this->response($res);```

5命令列

命令列基於symfony/console包擴充套件而來

基本命令

建立command檔案,位於app/Console/Command

php rookies make:command Test

建立Controller

php rookie create:controller TestController
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章