最近正在用Symfony2.5框架寫一個境外電子商務項目,搭配webseverse編寫相關接口;還好對方已經提供了相關接口,我只用寫前段接口就好,但是用Symfony2.5操作數據庫也是相當簡單的;我接觸過相當多人都覺得此框架難,分析了相關原因是它長得像Java一樣,mvc思想更加根深蒂固了;但有個好處是能與像Java這些語言匹敵了。話不多說,聊下今天要講的主題吧!
在Symfony2.5編程過程中也遇到了不少錯誤,我以後就將我遇到的錯誤總結如下,供大家參考,希望能幫助大家快速開發。
報錯:
Oops! An Error Occurred The server returned a "404 Not Found"....
問題:一般爲服務器內部錯誤,你的後臺代碼編寫引發的問題。
這裏有兩種情況:
1.是頁面訪問時:比如Symfony路由寫錯,系統找不到,Symfony入口文件爲app_dev.php,大家可能輸的是http://localhost/Symfony/web/ ,更改爲http://localhost/Symfony/web/app_dev.php ;更多安裝問題請參考:http://9670708.blog.51cto.com/9660708/1584872
2.是服務器處理(如表單處理)時:服務器內部錯誤,可能服務器內部處理問題(如數據提交問題,原本數據庫要求爲Byte型,但你輸入超出長度)。
報錯:
Attempted to load from the global namespace in E:\wamp\www\branches\dev\src\Ce\WebBundle\Model\AbstractModel.php line 53.
問題:表單傳值(生成)規範與服務器數據集不和,Symfony框架可生成表單,在FROM目錄下,生成字段要與MODLE裏字段一致,可能一個字段不對編出現此錯誤。
報錯:
Parse Error: syntax error, unexpected '[' in D:\wamp\www\Symfony\src\site\BlogBundle\Controller\UserController.php line 29
問題:提示有個“(” 或 “[” 不認識是因爲版本問題,php版本需要支持Symfony都至少5.3.0以上,需要支持“(” 或 “[”(來表示數組)的話,必須要php5.4+以上。
報錯:
FatalErrorException:Compile Error: Cannot use Ce\Webdle\Model\SearcngNumber as SearchExprekingNumber because the name is already in use in D:\wamp\www\Ce\WebBundle\Controller\OrController.phpline 61
問題:model已經引入進來了,“use”出現重複,需要去掉一個“use”。
報錯:
格式化程序嘗試對消息反序列化時引發異常: 嘗試對參數 http://tempuri.org/ 進行反序列化時出錯: request。InnerException 消息是“反序列化對象 屬於類型 ZT.CE.DES.Service.Entities.GenerateExpressBillRequest 時出現錯誤。在行 2、位置 419 處出現錯誤。 不能將值“21312”作爲類型“Byte”來分析。”。有關詳細信息,請參見 InnerException。
問題:提交數據字段格式(要求二維數組,但你是一維數組)或者數據(數據爲空了)與要求的數據不一致;打印出要提交的字段,看與要求字段有和差別,再更改,想辦法將字段更改爲要求的。
報錯:
No route found for "GET /demo/hello" 404 Not Found -NotFoundHttpException 1 linkedException:ResourceNotFoundException
問題:原因是路由沒有找到你傳過來的GET值,一般是url 路由寫錯或者是沒有傳參數,比如原本的代碼:
/**
* @Route("/hello/{name}", name="_demo_hello")
* @Template()
*/
public function helloAction($name)
{
return array('name' => $name);
}
這裏/hello/{name} 看出,/hello/後還應該跟一個參數;
上面報錯,發現hello後並沒有跟參數,改爲這樣就行了:http://localhost/web/app_dev.php/demo/hello/55
報錯:
ContextErrorException: Warning: file_get_contents(/Users/Paul/Sites/Project/htdocs/projectweb/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/Resources/views/Exception/exception_full.html.twig): failed to open stream: No such file or directory in/var/www/projectweb/vendor/twig/twig/lib/Twig/Loader/Filesystem.php line 130
問題:(找不到緩存文件)在命令行輸入,清空緩存即可:
php app/console cache:clear
以下爲Symfony2.5+webseverse 報錯:
報錯:
Attempted to load class "SoapClient" from the global namespace in E:\wamp\www\branches\dev\src\Ce\WebBundle\Model\AbstractModel.php line 53. Did you forget a use statement for this class?
問題:這句話是說不認識SoapClient,提示是否忘記聲明類了,原因是PHP默認不支持Soap,需要在php.ini裏開啓服務。
報錯:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://wdfd:8080/rpc/soap/jasoapservice-v2?wsdl' : failed to load external entity "http://wdfd:8080/resd/soap/jsoapservice-v2?wsdl"
問題:這個錯可能是wdfd域名無法認識的原因,1.可能是你斷網了(但這種錯基本自己能解決);2.需要在win32 hosts文件裏添加這個域名解析;或者是因爲win32不支持PHPcurl等操作,需要把PHP中的相關文件複製在system32下(開啓相關板塊)。
本章的許多問題都是給了大家一個提示,大家可以靠提示在百度,因爲直接百度Symfony什麼報錯是收不到的,原因是Symfony在國內不流行;但不得不說它是一個超越php其他框架的好東西。大家有問題可以留言。