自己寫的PHP框架

package: laiPHP
created_at: 2018/08/13 00:00:00
link: https://github.com/LaiJunBin/laiPHP

基本檔案目錄

   |
   |___<app>
   |     |___ <controller>
   |     |___ <middleware>
   |     |___ <views>
   |
   |___<autoload>
   |
   |___<database>
   |     |___ <migrations>
   |     |___ <seeders>
   |
   |___<public>
   |
   |___<samplefiles>

說明

app:存放Model,如app/Example.php

app/controller:存放控制器,處理邏輯

app/middleware:存放中介層

app/views:存放畫面,有提供模板引擎(.lai.php)

autoload:自動載入的類別

database/migrations: 存放 Migration

database/seeders: 存放 Seeder

public:對外公開的檔案,可以在外部直接輸入網址讀取

controller.php 控制器

route.php 處理路由,在autoload/web.php使用

function.php 常用方法寫在這個檔案中,整個程式都可以使用

samplefiles:存放cli相關的檔案(盡量不要動)


說明

function.php

Method Description
dd(var1,var2...) 印出變數並結束程式執行
dump(var1,var2...) 印出變數但不結束程式執行
keys(array) 回傳陣列的keys
values(array) 回傳陣列的values
containsKey(array,key) 判斷陣列中是否存在索引為key
contains(array,data) 判斷陣列中是否存在資料為data
array_fetch(array, keys) 為陣列中所有元素抓取keys的元素,階層以.分隔
array_only(array, keys) 為陣列中第一個元素抓取keys的元素,階層以.分隔
array_get(array, key, default) 以key取得陣列中的元素,階層以.分隔
array_forget(array, key, exception=false) 以key刪除陣列中的元素,階層以.分隔,若exception為true,找不到name將會報錯
array_copy(a, b, key) 複製b陣列中key的資料至a陣列
array_map_recursive(array, func) 遞迴執行array_map
clearEmpty(array) 清除陣列中所有空的元素
Response(res=null) 產生Response()物件
get_mime_type(filename) 取得檔案的mime type
old(key, default) 取得舊的輸入資料
method_field(method) 產生表單欺騙隱藏欄位
str_replace_first(search, replace, subject) 字串取代(只取代第一筆)
clean_url(url) 將url多餘的/清除
public_path(path) 取得public path
assets_path(path) 取得assets path
route(name, params=[]) 取得特定名稱路由的url,可帶入參數
include_model(model) 引入 Model
include_models(models=[]) 引入多個Model
array_to_model($array, $model) 將 array 轉換為 model, 相當於 new $model($array)
array_to_models($arrays, $model) 將二維陣列中每個array轉換為model,並傳回 Collection 集合
session() 取得 session 物件

request.php

Request 物件

Method Description
status 取得Http Response Code
method 取得 方法 GET POST ....
get(array,data) 取得GET資料
post(array) 取得POST資料
file(name) 取得FILE
json(array,key) 取得JSON資料
all(array) 依順序回傳第一個非空的資料,順序為JSON,POST,GET
headers(key=null) 回傳對應的header,如果key=null將回傳所有header
{route params} 回傳對應的路由參數,例如 $request->name

response.php

Response 物件

Method Description
json(json_data=[]) json response
code(code=200) 設定http_response_code
redirect(url) 轉址
redirectRoute(name, params=[]) 轉址到特定route
back() 回到上一頁
view(file,params=[]) 顯示views中的文件,也可以傳入參數
log(status_code=200) 在主控台打印Response Log
withInput() 可搭配 old() 使用,將使用者輸入的值放回input
withErrors(errors=[]) 可在模板引擎中取得$errors變數

collection.php

Collection 物件

Method Description
clear() 清除資料
set(data) 設定data
assign(items) 覆蓋items
get(index) 取得第index筆資料
includes(item) 是否包含item
first() 取得第一筆資料
last() 取得最後一筆資料
count() 取得集合中的資料數
map(func) map處理
filter(func) filter處理
find(func) 取得第一筆符合條件的資料
forEach(func) foreach處理
fetch(keys) 同 array_fetch
only(keys) 同 array_only
to_array() 取得陣列
recursive(func) 遞迴集合
sum() 加總
flat() 攤平一層
join(glup) join資料

session.php

Session 物件

Method Description
has(name) session是否存在,name階層以.分隔
get(name, default) 取得session值,name階層以.分隔
put(name, value) 設定session
forget(name, exception=false) 刪除session,name階層以.分隔,若exception為true,找不到name將會報錯

auth.php

Auth 物件

Method Description
login(user) 登入
logout() 登出
check() 檢查是否登入
user() 取得登入的使用者
get_user_class() 取得user使用的class

url.php

URL 物件

Method Description
current() 取得當前URL
previous() 取得前一個URL

命令使用

Command Description
php lai serv 啟動測試伺服器
php lai make:controller 產生控制器(controller)
php lai make:middleware 產生中介層(middleware)
php lai make:migration 產生migration
php lai make:model 產生模型(model)
php lai make:seeder 產生seeder
php lai migrate 建立你所定義的table
php lai migrate:fresh 刪除所有定義的table
php lai migrate:refresh 相當於 migrate:fresh + migrate
php lai db:seed 執行 seed
php lai route:list 顯示當前所有路由
php lai help 幫助訊息

DB 使用

Example為Model Class

DB為基底類別

Method Description
DB::execute(SQL) 執行SQL語法
Example::count() 取得Example表的資料筆數
Example::create([key=>value,...]) 對Example表新增資料
Example::update([key=>value,...],[condition=>value,...]) 對Example表修改資料
Example::delete([condition=>value,...]) 對Example表刪除資料
Example::get(index) 取得Example表的第i筆資料
Example::get([orderby=>value,...]) 取得Example表所有資料
Example::get(index, [orderby=>value,...]) 取得Example表排序後的第i筆資料
Example::find([condition=>value,...]) 對Example表尋找資料(一筆)
Example::findall([condition=>value,...]) 對Example表尋找資料(全部)
Example::contains([condition=>value,...]) 對Example表尋找資料(回傳是否存在)
$example->save() 將$example存入資料庫
$example->delete() 將$example從資料庫刪除
$example->update([key => value, ...]) 將$example更新
$example->isInstance() 檢查$example是否為資料庫中的實體

關聯模型

Method Description
$this->hasOne(模型, 外鍵, 主鍵); 一對一
$this->hasMany(模型, 外鍵, 主鍵); 一對多
$this->through(模型, 外鍵, 主鍵)->hasMany(模型, 外鍵, 主鍵); 多對多

參數說明:

  • 模型 => app資料夾底下的Model,Ex: Example
  • 外鍵 => 若不輸入則預設為 模型_id, Ex: example_id,若為多對多關聯則預設值為呼叫的模型class_id
  • 主鍵 => 若不輸入則預設為 id

Template Engine

此區文件需到 GitHub 上觀看

env.php

Const Description
HOST 伺服器位置,如localhost
PORT Port
DATA_BASE 資料庫名稱
USER_NAME 資料庫帳號
PASS_WORD 資料庫密碼

License

MIT