LingDuCodePHP 开源极简框架
2026/04/03 14:26:34
濡傛灉鎯崇敤AI寮€鍙戠▼搴忥紝浣嗗張瀚屽純鍏朵粬妗嗘灦绻佺悙鎴栬€呴渶瑕佸畨瑁呬緷璧栵紝鍙互閫夋嫨杩欐鏋佺畝妗嗘灦锛屾棤浠讳綍渚濊禆~
LingDuCodePHP 妗嗘灦 v2.0 鐗规€ф枃妗
馃専 妗嗘灦鏍稿績鐗硅壊
1. 闆朵緷璧栬璁
鏃燙omposer渚濊禆 - 瀹屽叏鐙珛杩愯锛屾棤闇€瀹夎浠讳綍绗笁鏂瑰寘
绾疨HP瀹炵幇 - 鎵€鏈夊姛鑳藉潎浣跨敤鍘熺敓PHP寮€鍙
杞婚噺绾 - 鏍稿績浠g爜绮剧畝锛屽姞杞藉揩閫
2. 浼佷笟绾ф暟鎹簱鏀寔
澶氭暟鎹簱椹卞姩
// MySQL
'default' => 'mysql'
// SQLite
'default' => 'sqlite'
// PostgreSQL
'default' => 'pgsql'
// SQL Server
'default' => 'sqlsrv'
璇诲啓鍒嗙
'mysql_rw' => [
'read' => [
'host' => '192.168.1.10,192.168.1.11', // 澶氫粠搴
],
'write' => [
'host' => '192.168.1.1', // 涓诲簱
],
]
闆嗙兢鏀寔
'mysql_cluster' => [
'read' => [
'host' => ['slave1', 'slave2', 'slave3'], // 鑷姩璐熻浇鍧囪
],
]
3. 寮哄ぇ鐨凮RM绯荤粺
鍩虹鏌ヨ
// 鏌ヨ鎵€鏈
$users = User::all();
// 鏉′欢鏌ヨ
$users = User::where('status', 1)->where('age', '>', 18)->get();
// 鍒嗛〉
$users = User::paginate(15);
// 鑱氬悎鍑芥暟
$count = User::count();
$sum = Order::sum('amount');
妯″瀷鍏宠仈
class User extends Model
{
// 涓€瀵逛竴
public function profile()
{
return $this->hasOne(Profile::class);
}
// 涓€瀵瑰
public function posts()
{
return $this->hasMany(Post::class);
}
// 澶氬澶
public function roles()
{
return $this->belongsToMany(Role::class, 'user_roles', 'user_id', 'role_id');
}
}
杞垹闄
class User extends Model
{
protected $softDelete = true;
protected $deleteTime = 'deletetime';
}
$user->delete(); // 杞垹闄
$user->restore(); // 鎭㈠
$user->forceDelete(); // 寮哄埗鍒犻櫎
4. 鍥介檯鍖栨敮鎸 (i18n)
澶氳瑷€閰嶇疆
// 璁剧疆璇█
Lang::setLocale('zh-cn');
// 鑾峰彇缈昏瘧
trans('common.welcome');
trans('validation.required', ['attribute' => '鐢ㄦ埛鍚']);
// 甯﹀弬鏁扮炕璇
trans('common.hello', ['name' => '寮犱笁']);
// 澶嶆暟褰㈠紡
trans_choice('items.count', $count);
璇█鏂囦欢缁撴瀯
lang/
鈹溾攢鈹€ zh-cn/
鈹 鈹溾攢鈹€ common.php
鈹 鈹溾攢鈹€ validation.php
鈹 鈹斺攢鈹€ pagination.php
鈹斺攢鈹€ en/
鈹溾攢鈹€ common.php
鈹溾攢鈹€ validation.php
鈹斺攢鈹€ pagination.php
5. 浠诲姟璋冨害绯荤粺
瀹氫箟璋冨害浠诲姟
// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
// 姣忓垎閽熸墽琛
$schedule->command('cache:clear')->everyMinute();
// 姣忓皬鏃舵墽琛
$schedule->job(CleanupJob::class)->hourly();
// 姣忓ぉ鍑屾櫒鎵ц
$schedule->exec('backup.sh')->dailyAt('02:00');
// 姣忓懆鎵ц
$schedule->command('report:weekly')->weekly();
// 宸ヤ綔鏃ユ墽琛
$schedule->job(ReportJob::class)->weekdays()->at('09:00');
// 闃叉閲嶅彔鎵ц
$schedule->command('heavy:task')
->everyFiveMinutes()
->withoutOverlapping(30);
}
Cron琛ㄨ揪寮忔敮鎸
$schedule->command('task')->cron('*/5 * * * *'); // 姣5鍒嗛挓
$schedule->command('task')->hourlyAt(17); // 姣忓皬鏃17鍒
$schedule->command('task')->monthlyOn(4, '15:00'); // 姣忔湀4鍙15:00
6. 鎬ц兘鐩戞帶宸ュ叿
璋冭瘯闈㈡澘
// 鍚敤璋冭瘯
Debug::enable();
// 鑷姩鏄剧ず锛
// - 鎵ц鏃堕棿
// - 鍐呭瓨浣跨敤
// - SQL鏌ヨ
// - 璇锋眰鏁版嵁
// - Session鏁版嵁
// - 鍔犺浇鏂囦欢鍒楄〃
鎬ц兘鍒嗘瀽
// 鍩哄噯娴嬭瘯
$result = Debug::benchmark(function() {
// 娴嬭瘯浠g爜
}, 1000);
// 浠g爜鍒嗘瀽
$profile = Debug::profile(function() {
return User::with('posts')->get();
}, 'User Query');
7. 澧炲己楠岃瘉鍣
楠岃瘉瑙勫垯
$validator = Validator::make($data, [
'username' => 'required|alpha_dash|min:3|max:20|unique:users',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
'phone' => 'required|phone',
'id_card' => 'required|id_card',
'age' => 'required|integer|between:18,100',
'website' => 'url',
'avatar' => 'image|max:2048',
]);
if ($validator->fails()) {
return $validator->errors();
}
鑷畾涔夎鍒
Validator::extend('strong_password', function($field, $value, $params) {
return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/', $value);
});
鏉′欢楠岃瘉
$validator->sometimes('company', 'required', function($data) {
return $data->account_type === 'business';
});
8. 寮哄ぇ鐨勬ā鏉垮紩鎿
鎺у埗缁撴瀯
{if $user}
娆㈣繋 {$user.name}
{elseif $guest}
璇风櫥褰
{else}
璁垮妯″紡
{/if}
{volist name="users" id="user" key="k"}
<tr>
<td>{$k}</td>
<td>{$user.name}</td>
<td>{$user.email}</td>
</tr>
{/volist}
{foreach $items as $item}
{$item.name}
{/foreach}
{for start="1" end="10" name="i"}
绗 {$i} 娆
{/for}
{switch $status}
{case 1}鍚敤{/case}
{case 0}绂佺敤{/case}
{default}鏈煡{/default}
{/switch}
杩囨护鍣
{$content|safe} XSS杩囨护
{$title|truncate=50} 鎴柇
{$price|money} 鏍煎紡鍖栭噾棰
{$date|date='Y-m-d'} 鏃ユ湡鏍煎紡
{$name|default='鍖垮悕'} 榛樿鍊
{$text|upper} 澶у啓
{$text|lower} 灏忓啓
{$text|strip_tags} 鍘婚櫎HTML
妯℃澘缁ф壙
<!-- layout.html -->
<html>
<body>
{block name="header"}榛樿澶撮儴{/block}
{block name="content"}{/block}
{block name="footer"}榛樿搴曢儴{/block}
</body>
</html>
<!-- page.html -->
{extend name="layout" /}
{block name="content"}
椤甸潰鍐呭
{/block}
9. 瀹夊叏鐗规€
CSRF闃叉姢
<form>
{:csrf_field()}
</form>
XSS杩囨护
$clean = Security::xssClean($dirty);
SQL娉ㄥ叆闃叉姢
// 鑷姩鍙傛暟缁戝畾
User::where('name', $input)->get();
瀵嗙爜鍔犲瘑
$hash = Security::passwordHash('password');
$verified = Security::verifyPassword('password', $hash);
10. 缂撳瓨绯荤粺
澶氶┍鍔ㄦ敮鎸
Cache::store('file')->set('key', $value);
Cache::store('redis')->set('key', $value);
Cache::store('memcache')->set('key', $value);
缂撳瓨鏂规硶
// 鍩虹鎿嶄綔
Cache::set('key', $value, 3600);
Cache::get('key', $default);
Cache::has('key');
Cache::delete('key');
Cache::clear();
// 璁颁綇缂撳瓨
$value = Cache::remember('users', 3600, function() {
return User::all();
});
// 鑷/鑷噺
Cache::inc('views');
Cache::dec('stock');
// 鏍囩缂撳瓨
Cache::tags(['user', 'profile'])->set('key', $value);
馃搳 涓庝富娴佹鏋跺姣
鐗规€ LingDuCodePHP Laravel ThinkPHP
闆朵緷璧 鉁 鉂 鉂
璇诲啓鍒嗙 鉁 鉁 鉁
澶氭暟鎹簱 鉁 鉁 鉁
ORM 鉁 鉁 鉁
鍥介檯鍖 鉁 鉁 鉁
浠诲姟璋冨害 鉁 鉁 鉁
璋冭瘯闈㈡澘 鉁 鉁 鉁
妯℃澘寮曟搸 鉁 Blade 鉁
瀹夎澶嶆潅搴 绠€鍗 澶嶆潅 涓瓑
瀛︿範鏇茬嚎 骞崇紦 闄″抄 涓瓑
鎬ц兘 楂 涓 涓
馃殌 蹇€熷紑濮
鐜瑕佹眰
PHP >= 7.4
PDO鎵╁睍
Mbstring鎵╁睍
瀹夎
# 涓嬭浇妗嗘灦
git clone https://github.com/lingdu/LingDuCodePHP.git
# 閰嶇疆鐜
cp .env.example .env
# 璁剧疆瀵嗛挜
# 缂栬緫 .env 鏂囦欢锛岃缃 APP_KEY
# 瀵煎叆鏁版嵁搴
mysql -u root -p database < database.sql
鐩綍缁撴瀯
LingDuCodePHP/
鈹溾攢鈹€ app/ # 搴旂敤鐩綍
鈹 鈹溾攢鈹€ admin/ # 鍚庡彴妯″潡
鈹 鈹溾攢鈹€ api/ # API妯″潡
鈹 鈹溾攢鈹€ common/ # 鍏叡妯″潡
鈹 鈹斺攢鈹€ install/ # 瀹夎妯″潡
鈹溾攢鈹€ config/ # 閰嶇疆鏂囦欢
鈹溾攢鈹€ framework/ # 妗嗘灦鏍稿績
鈹 鈹溾攢鈹€ core/ # 鏍稿績绫
鈹 鈹溾攢鈹€ db/ # 鏁版嵁搴
鈹 鈹溾攢鈹€ cache/ # 缂撳瓨
鈹 鈹溾攢鈹€ template/ # 妯℃澘
鈹 鈹斺攢鈹€ ...
鈹溾攢鈹€ lang/ # 璇█鏂囦欢
鈹溾攢鈹€ public/ # 鍏叡璧勬簮
鈹溾攢鈹€ runtime/ # 杩愯鏃剁洰褰
鈹斺攢鈹€ lingdu # 鍛戒护琛屽伐鍏
馃摑 鐗堟湰鏇存柊
v2.0.0 鏂板鐗规€
鉁 鏁版嵁搴撹鍐欏垎绂讳笌闆嗙兢鏀寔
鉁 鍥介檯鍖栧璇█绯荤粺
鉁 浠诲姟璋冨害绯荤粺
鉁 鎬ц兘鐩戞帶璋冭瘯闈㈡澘
鉁 澧炲己楠岃瘉鍣紙30+瑙勫垯锛
鉁 妯℃澘寮曟搸澧炲己锛20+杩囨护鍣級
鉁 澶氭暟鎹簱椹卞姩鏀寔
鉁 瀹夊叏澧炲己锛圕SRF/XSS/SQL娉ㄥ叆锛
LingDuCodePHP - 闆朵緷璧栥€侀珮鎬ц兘銆佷紒涓氱骇PHP妗嗘灦
妗嗘灦寮€婧愪笅杞藉湴鍧€锛歨ttps://gitee.com/lingdubingfeng/ling-du-php-framework
LingDuCodePHP 妗嗘灦 v2.0 鐗规€ф枃妗
馃専 妗嗘灦鏍稿績鐗硅壊
1. 闆朵緷璧栬璁
鏃燙omposer渚濊禆 - 瀹屽叏鐙珛杩愯锛屾棤闇€瀹夎浠讳綍绗笁鏂瑰寘
绾疨HP瀹炵幇 - 鎵€鏈夊姛鑳藉潎浣跨敤鍘熺敓PHP寮€鍙
杞婚噺绾 - 鏍稿績浠g爜绮剧畝锛屽姞杞藉揩閫
2. 浼佷笟绾ф暟鎹簱鏀寔
澶氭暟鎹簱椹卞姩
// MySQL
'default' => 'mysql'
// SQLite
'default' => 'sqlite'
// PostgreSQL
'default' => 'pgsql'
// SQL Server
'default' => 'sqlsrv'
璇诲啓鍒嗙
'mysql_rw' => [
'read' => [
'host' => '192.168.1.10,192.168.1.11', // 澶氫粠搴
],
'write' => [
'host' => '192.168.1.1', // 涓诲簱
],
]
闆嗙兢鏀寔
'mysql_cluster' => [
'read' => [
'host' => ['slave1', 'slave2', 'slave3'], // 鑷姩璐熻浇鍧囪
],
]
3. 寮哄ぇ鐨凮RM绯荤粺
鍩虹鏌ヨ
// 鏌ヨ鎵€鏈
$users = User::all();
// 鏉′欢鏌ヨ
$users = User::where('status', 1)->where('age', '>', 18)->get();
// 鍒嗛〉
$users = User::paginate(15);
// 鑱氬悎鍑芥暟
$count = User::count();
$sum = Order::sum('amount');
妯″瀷鍏宠仈
class User extends Model
{
// 涓€瀵逛竴
public function profile()
{
return $this->hasOne(Profile::class);
}
// 涓€瀵瑰
public function posts()
{
return $this->hasMany(Post::class);
}
// 澶氬澶
public function roles()
{
return $this->belongsToMany(Role::class, 'user_roles', 'user_id', 'role_id');
}
}
杞垹闄
class User extends Model
{
protected $softDelete = true;
protected $deleteTime = 'deletetime';
}
$user->delete(); // 杞垹闄
$user->restore(); // 鎭㈠
$user->forceDelete(); // 寮哄埗鍒犻櫎
4. 鍥介檯鍖栨敮鎸 (i18n)
澶氳瑷€閰嶇疆
// 璁剧疆璇█
Lang::setLocale('zh-cn');
// 鑾峰彇缈昏瘧
trans('common.welcome');
trans('validation.required', ['attribute' => '鐢ㄦ埛鍚']);
// 甯﹀弬鏁扮炕璇
trans('common.hello', ['name' => '寮犱笁']);
// 澶嶆暟褰㈠紡
trans_choice('items.count', $count);
璇█鏂囦欢缁撴瀯
lang/
鈹溾攢鈹€ zh-cn/
鈹 鈹溾攢鈹€ common.php
鈹 鈹溾攢鈹€ validation.php
鈹 鈹斺攢鈹€ pagination.php
鈹斺攢鈹€ en/
鈹溾攢鈹€ common.php
鈹溾攢鈹€ validation.php
鈹斺攢鈹€ pagination.php
5. 浠诲姟璋冨害绯荤粺
瀹氫箟璋冨害浠诲姟
// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
// 姣忓垎閽熸墽琛
$schedule->command('cache:clear')->everyMinute();
// 姣忓皬鏃舵墽琛
$schedule->job(CleanupJob::class)->hourly();
// 姣忓ぉ鍑屾櫒鎵ц
$schedule->exec('backup.sh')->dailyAt('02:00');
// 姣忓懆鎵ц
$schedule->command('report:weekly')->weekly();
// 宸ヤ綔鏃ユ墽琛
$schedule->job(ReportJob::class)->weekdays()->at('09:00');
// 闃叉閲嶅彔鎵ц
$schedule->command('heavy:task')
->everyFiveMinutes()
->withoutOverlapping(30);
}
Cron琛ㄨ揪寮忔敮鎸
$schedule->command('task')->cron('*/5 * * * *'); // 姣5鍒嗛挓
$schedule->command('task')->hourlyAt(17); // 姣忓皬鏃17鍒
$schedule->command('task')->monthlyOn(4, '15:00'); // 姣忔湀4鍙15:00
6. 鎬ц兘鐩戞帶宸ュ叿
璋冭瘯闈㈡澘
// 鍚敤璋冭瘯
Debug::enable();
// 鑷姩鏄剧ず锛
// - 鎵ц鏃堕棿
// - 鍐呭瓨浣跨敤
// - SQL鏌ヨ
// - 璇锋眰鏁版嵁
// - Session鏁版嵁
// - 鍔犺浇鏂囦欢鍒楄〃
鎬ц兘鍒嗘瀽
// 鍩哄噯娴嬭瘯
$result = Debug::benchmark(function() {
// 娴嬭瘯浠g爜
}, 1000);
// 浠g爜鍒嗘瀽
$profile = Debug::profile(function() {
return User::with('posts')->get();
}, 'User Query');
7. 澧炲己楠岃瘉鍣
楠岃瘉瑙勫垯
$validator = Validator::make($data, [
'username' => 'required|alpha_dash|min:3|max:20|unique:users',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
'phone' => 'required|phone',
'id_card' => 'required|id_card',
'age' => 'required|integer|between:18,100',
'website' => 'url',
'avatar' => 'image|max:2048',
]);
if ($validator->fails()) {
return $validator->errors();
}
鑷畾涔夎鍒
Validator::extend('strong_password', function($field, $value, $params) {
return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/', $value);
});
鏉′欢楠岃瘉
$validator->sometimes('company', 'required', function($data) {
return $data->account_type === 'business';
});
8. 寮哄ぇ鐨勬ā鏉垮紩鎿
鎺у埗缁撴瀯
{if $user}
娆㈣繋 {$user.name}
{elseif $guest}
璇风櫥褰
{else}
璁垮妯″紡
{/if}
{volist name="users" id="user" key="k"}
<tr>
<td>{$k}</td>
<td>{$user.name}</td>
<td>{$user.email}</td>
</tr>
{/volist}
{foreach $items as $item}
{$item.name}
{/foreach}
{for start="1" end="10" name="i"}
绗 {$i} 娆
{/for}
{switch $status}
{case 1}鍚敤{/case}
{case 0}绂佺敤{/case}
{default}鏈煡{/default}
{/switch}
杩囨护鍣
{$content|safe} XSS杩囨护
{$title|truncate=50} 鎴柇
{$price|money} 鏍煎紡鍖栭噾棰
{$date|date='Y-m-d'} 鏃ユ湡鏍煎紡
{$name|default='鍖垮悕'} 榛樿鍊
{$text|upper} 澶у啓
{$text|lower} 灏忓啓
{$text|strip_tags} 鍘婚櫎HTML
妯℃澘缁ф壙
<!-- layout.html -->
<html>
<body>
{block name="header"}榛樿澶撮儴{/block}
{block name="content"}{/block}
{block name="footer"}榛樿搴曢儴{/block}
</body>
</html>
<!-- page.html -->
{extend name="layout" /}
{block name="content"}
椤甸潰鍐呭
{/block}
9. 瀹夊叏鐗规€
CSRF闃叉姢
<form>
{:csrf_field()}
</form>
XSS杩囨护
$clean = Security::xssClean($dirty);
SQL娉ㄥ叆闃叉姢
// 鑷姩鍙傛暟缁戝畾
User::where('name', $input)->get();
瀵嗙爜鍔犲瘑
$hash = Security::passwordHash('password');
$verified = Security::verifyPassword('password', $hash);
10. 缂撳瓨绯荤粺
澶氶┍鍔ㄦ敮鎸
Cache::store('file')->set('key', $value);
Cache::store('redis')->set('key', $value);
Cache::store('memcache')->set('key', $value);
缂撳瓨鏂规硶
// 鍩虹鎿嶄綔
Cache::set('key', $value, 3600);
Cache::get('key', $default);
Cache::has('key');
Cache::delete('key');
Cache::clear();
// 璁颁綇缂撳瓨
$value = Cache::remember('users', 3600, function() {
return User::all();
});
// 鑷/鑷噺
Cache::inc('views');
Cache::dec('stock');
// 鏍囩缂撳瓨
Cache::tags(['user', 'profile'])->set('key', $value);
馃搳 涓庝富娴佹鏋跺姣
鐗规€ LingDuCodePHP Laravel ThinkPHP
闆朵緷璧 鉁 鉂 鉂
璇诲啓鍒嗙 鉁 鉁 鉁
澶氭暟鎹簱 鉁 鉁 鉁
ORM 鉁 鉁 鉁
鍥介檯鍖 鉁 鉁 鉁
浠诲姟璋冨害 鉁 鉁 鉁
璋冭瘯闈㈡澘 鉁 鉁 鉁
妯℃澘寮曟搸 鉁 Blade 鉁
瀹夎澶嶆潅搴 绠€鍗 澶嶆潅 涓瓑
瀛︿範鏇茬嚎 骞崇紦 闄″抄 涓瓑
鎬ц兘 楂 涓 涓
馃殌 蹇€熷紑濮
鐜瑕佹眰
PHP >= 7.4
PDO鎵╁睍
Mbstring鎵╁睍
瀹夎
# 涓嬭浇妗嗘灦
git clone https://github.com/lingdu/LingDuCodePHP.git
# 閰嶇疆鐜
cp .env.example .env
# 璁剧疆瀵嗛挜
# 缂栬緫 .env 鏂囦欢锛岃缃 APP_KEY
# 瀵煎叆鏁版嵁搴
mysql -u root -p database < database.sql
鐩綍缁撴瀯
LingDuCodePHP/
鈹溾攢鈹€ app/ # 搴旂敤鐩綍
鈹 鈹溾攢鈹€ admin/ # 鍚庡彴妯″潡
鈹 鈹溾攢鈹€ api/ # API妯″潡
鈹 鈹溾攢鈹€ common/ # 鍏叡妯″潡
鈹 鈹斺攢鈹€ install/ # 瀹夎妯″潡
鈹溾攢鈹€ config/ # 閰嶇疆鏂囦欢
鈹溾攢鈹€ framework/ # 妗嗘灦鏍稿績
鈹 鈹溾攢鈹€ core/ # 鏍稿績绫
鈹 鈹溾攢鈹€ db/ # 鏁版嵁搴
鈹 鈹溾攢鈹€ cache/ # 缂撳瓨
鈹 鈹溾攢鈹€ template/ # 妯℃澘
鈹 鈹斺攢鈹€ ...
鈹溾攢鈹€ lang/ # 璇█鏂囦欢
鈹溾攢鈹€ public/ # 鍏叡璧勬簮
鈹溾攢鈹€ runtime/ # 杩愯鏃剁洰褰
鈹斺攢鈹€ lingdu # 鍛戒护琛屽伐鍏
馃摑 鐗堟湰鏇存柊
v2.0.0 鏂板鐗规€
鉁 鏁版嵁搴撹鍐欏垎绂讳笌闆嗙兢鏀寔
鉁 鍥介檯鍖栧璇█绯荤粺
鉁 浠诲姟璋冨害绯荤粺
鉁 鎬ц兘鐩戞帶璋冭瘯闈㈡澘
鉁 澧炲己楠岃瘉鍣紙30+瑙勫垯锛
鉁 妯℃澘寮曟搸澧炲己锛20+杩囨护鍣級
鉁 澶氭暟鎹簱椹卞姩鏀寔
鉁 瀹夊叏澧炲己锛圕SRF/XSS/SQL娉ㄥ叆锛
LingDuCodePHP - 闆朵緷璧栥€侀珮鎬ц兘銆佷紒涓氱骇PHP妗嗘灦
妗嗘灦寮€婧愪笅杞藉湴鍧€锛歨ttps://gitee.com/lingdubingfeng/ling-du-php-framework