自己寫的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 | 資料庫密碼 |