最近正在用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其他框架的好东西。大家有问题可以留言。