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