背景:Cakephp開發環境版本是2.3.8,服務器的cakephp版本是2.3.5,測試好的代碼上傳到服務器上後發現總爆如下的警告:
Warning (2): strtolower() expects parameter 1 to be string, array given [CORE\Cake\Network\CakeRequest.php, line 478]
經過比對2.3.8和2.3.5發現,2.3.8比2.3.5的function is多了如下的代碼:
(( = ((, 'is'), (()) > 0
雖然通過直接修改lib裡的文件就能解決問題,但考慮到以後升級等問題,於是決定自定義這個CakeRequest,重寫is函數。
過程如下:
在app/Config/bootstrap.php中加入如下代碼:
APP . 'Lib' . DS . 'Network' . DS . 'CakeRequest.php'Error: Class 'CakeRequest' not found
require APP . 'Lib' . DS . 'Network' . DS . 'AppCakeRequest.php';
在app/Lib/目錄下新建Network目錄, 將庫裡(lib/Cake/Network/)的CakeRequest.php拷貝至這個目錄中,
然後在這個目錄裡添加AppCakeRequest.php:
<? AppCakeRequest is( (( = ((, 'is'), (()) > 0 = ( (!(->_detectors[ = ->_detectors[ ((['env' ((['value' env(['env']) == ['value' ((['pattern' (bool)(['pattern'], env(['env' ((['options' = '/' . ('|', ['options']) . '/i' (bool)(, env(['env' ((['param' = ['param' = ['value' (->params[]) ? ->params[] == : ((['callback']) && (['callback' (['callback'],
編輯app/webroot/index.php:
-> AppCakeRequest(), CakeResponse(('charset' => Configure::read('App.encoding'
大功告成,錯誤不再爆了,偶是cakephp新手,歡迎拍磚。
參考:http://stackoverflow.com/questions/8554536/extending-the-cakerequest-object
最後吐槽一下,今天終於算是把這個項目做完了,半年前應朋友的邀,接下這個Cakephp的網站項目,
雖然工期很輕松,足足給了我大半年的時間,而且朋友的需求也是斷斷續續給我的。
以前從來沒接觸過php,更別說cakephp,而且國內cakephp的資料比較少,很多問題都得去英文或者日文雅虎上找答案。
有時候真的想shi的心都有啊。
這實在是太浪費自己的碎片時間了,以後再也不會接這種私活了。
有空余時間不如學習下自己感興趣的知識不是?