phalcon遇到的那些坑

追憶丶年華發表於2018-01-16

1.資料重複插入

資料被重複插入,一般是在index/index方法中進行資料庫insert操作,會發現一條資料被重複插了一次。

原因:瀏覽器有時候會自動請求 /favicon.ico ,而你的網站並沒有這個檔案,恰好預設路由又無法匹配這種帶有"點"的路徑,所以呢,就被當作無匹配的路徑了,這時候就會進入defaultController/defaultAction了,相當於多請求了index/index,從而造成插入兩次資料。

解決:為路由服務新增 notFound 配置,例如:$router->notFound(array('controller'=>'httperr','action'=>'err404'));其中httperr和err404是自己建立的控制器和方法。這樣當路由匹配不到路徑的時候,就會進入這個控制器,而不會進入預設控制器了,問題得以解決。

<!-- lang: php -->
$router->add('/',array(
  "controller"=>'index',
  "action"=>'index'
));
$router->notFound(array('controller'=>'httperr','action'=>'err404'));
2.大小寫問題

目前可以確定的是 url中控制器大小寫不敏感,框架會自動轉為駝峰式再去找類,需要注意的是dispacther::getControllerName()是和url中一致的,不會轉換成標準模式。 檢視目錄名,應該是統一小寫。 自定義路由規則的時候模組名匹配是區分大小寫的,請注意。

3.欄位後設資料快取

預設框架會在第一次查詢該表時,會查詢表結構資訊,然後快取在記憶體中,在本次請求中再次查詢該表就不用再通過sql查詢表結構了。但是在複雜邏輯下,由於使用到多個模型,其表結構查詢所帶來的時間消耗佔了總查詢時間的10%~%50左右,所以有必要做一個落地快取,將表結構資訊快取到檔案或者memcache、redis中,只是要記得,在修改過表結構後,要清空相關快取。

相關文章