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中,只是要記得,在修改過表結構后,要清空相關緩存。