折騰了很久了也經(jīng)歷了很多線上和開(kāi)發(fā)上遇到的各種坑,下面來(lái)說(shuō)說(shuō)需要特別注意的地方,歡迎大家留言補(bǔ)充。 Composer包的引入 問(wèn)題:很多包并不適用,我就在生產(chǎn)的時(shí)候遇到過(guò)這樣一個(gè)問(wèn)題 $this->app->setRuntimePath($this->app->getRuntimePath() . $appName . DIRECTORY_SEPARATOR); 看出問(wèn)題在哪里了嗎? ...
繼今天發(fā)布通過(guò)固定注解來(lái)包裝的切面后,發(fā)現(xiàn)在實(shí)際業(yè)務(wù)中局限性還是很大,于是又繼續(xù)完善了下。采用接口的形式進(jìn)行定義處理。而不是固定的通過(guò)包裝的形式。 你可以把這個(gè)想成“針對(duì)某個(gè)方法的”中間件調(diào)用鏈 實(shí)現(xiàn)接口 <?php declare(strict_types=1); namespace app\admin\attribute; use panda\container\Contract\AopHand...
aop 可以實(shí)現(xiàn)不修改原有邏輯的情況下,對(duì)功能的擴(kuò)展。是非常實(shí)用的功能。只要經(jīng)過(guò)容器的調(diào)用都支持切面 無(wú)需配置 輸出演示 示例 class Test { // get請(qǐng)求 #[GET] // 請(qǐng)求映射 #[Rule('/demo')] // 方法進(jìn)入前調(diào)用 調(diào)用參數(shù)為callable 支持參數(shù)傳入 #[BeforeEntering([Test::class, 'b...
[RequestCompletion] 的執(zhí)行時(shí)機(jī)是 每個(gè)請(qǐng)求的最后階段。此時(shí)前端內(nèi)容早已響應(yīng)完畢 本例中 是用來(lái)記錄后臺(tái)的操作日志 /** * @Date: 2023/3/18 * @Author: WasonCheung * 操作日志記錄 */ class AdminOperationLogger { /** * @var AdminLogEntity[] */ pub...
debug是開(kāi)發(fā)中 必不可少的一環(huán) pandaman內(nèi)置了debugbar,使用注解可以快速方便的在任何位置注冊(cè)你的debug信息 // 注冊(cè)debug信息收集器 #[AsDebugDataCollector] class ConfigDataCollector extends RequestDataCollector { public function getName() { ret...
在pandaman中擴(kuò)展了中間件的功能 > 框架不設(shè)內(nèi)置加載,全部按需加載,路徑位置。全靠自定義 > 使用方法 類(lèi)似springboot的攔截器,可以根據(jù)地址進(jìn)行攔截操作。這種方式 // 注冊(cè)一個(gè)啟動(dòng)器 #[AsBoot] class AdminMiddlewareRegister { // 中間件注冊(cè)注入 public function boot(MiddlewareRegistry $re...
使用屬性類(lèi)定義路由的好處 最明顯的好處就是,開(kāi)發(fā)過(guò)程中,在需求,路徑,路由 等等反復(fù)修改時(shí)造成的多余的工作量。 對(duì)于控制器的寫(xiě)死方式,并不靈活,比如 我想把登錄的路由 放到用戶的路由組下,這種情況下容器一改全改。 而使用注解的方式定義,隨便你放到那里都行,不僅可以根據(jù)自己的喜好開(kāi)發(fā),還不受其它的影響。 在pandaman中,輕松一鍵獲取所有的路由,這在做權(quán)限判斷的時(shí)候更簡(jiǎn)單 class Login { #[G...
#[AsTimer(3, '測(cè)試')] public function timersss(): void { // 業(yè)務(wù)邏輯 支持依賴注入 } ...
[RequestCompletion] 請(qǐng)求完成調(diào)度執(zhí)行 當(dāng)你想在每次請(qǐng)求完成的最后階段做一些事,比如 清理日志,保存緩存,刷新統(tǒng)計(jì)等等。都能用到 使用方法 只需要把屬性類(lèi)方法需要執(zhí)行的任何方法內(nèi),同樣的也支持依賴注入 class TestE { #[RequestCompletion] public function handle(): void { Log::cle...
為什么有了Thinkphp和Webman還要如此蛋疼的搞個(gè)Pandaman出來(lái)? 在深度折騰過(guò)兩者后,基于自己的使用痛點(diǎn),改善而來(lái)。 傳統(tǒng)的PHP框架笨重,workerman已經(jīng)很好的解決了 容器管理 現(xiàn)代開(kāi)發(fā)中已經(jīng)必不可少了?;谌萜髯鲩_(kāi)發(fā),后期可以對(duì)各種實(shí)現(xiàn)的無(wú)縫切換。 同時(shí)對(duì)于類(lèi)也可以很好的解耦 在使用workerman后 遇到的最多的問(wèn)題,就是隱藏的bug,這并不是worker的問(wèn)題。很多composer包...