之前使用symfony在本地搭建起了此框架,http://www.04007.cn/article/685.html 在调试其路径的时候遇到了一点小郁闷,因为在按着官网测试其lucky控制器的时候竟然调试不通,官方文档上给的东西感觉已经是老版本的东西了,不能用,官网地址:https://symfony.com/doc/3.4/page_creation.html 我这里用的是Symfony 3.4.32版本,官网地址上显示的也是3.4,但确因为两个地方的问题用不通,先把官网上的东西截个图如下:本文地址:http://www.04007.cn/article/711.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/711.html,未经许可,不得转载.
我们先看一下上面的这个namespace,示例中使用的是namespace AppBundle\Controller;但是在程序中运行时如果使用这个命令空间根本找不到,src\AppBundle\Controller\LuckyController.php The file was found but the class was not in it, the class name or namespace probably has a typo。当然这前提是你要在routes.yaml里进行路由配置,这里我觉得官网还是说得不详细,既然是要让用户快速上手,为什么不把对应的正确的route配置在当前页面列出来,却又语焉不详。别忽视这个问题,别忽视这个地方,特别是这里出了错你根本不会觉得它有错,因为symfony有很多版本,版本之间存存差异,就像这个3.4.32就这之前的不一样。你看下面的route的正确配置下controller,前面我加上了app\,而在上面的文档中却未加上,反正我在3.4.32下进行了很多尝试,不加上这个app是不是行的。你也许很疑惑这个app代表了什么,是的,我觉得这个官网在第一个ca的介绍里应该要提到,这个需要去查看config/services.yaml文件,里面定义了app的路径就是src目录,但第一次使用这个框架的用户怎么知道要去查看这个文件呢?经过自己的调试摸索,把这个route弄清楚了,route正确的配置以及调试成功的php程序代码如下:本文地址:http://www.04007.cn/article/711.html,未经许可,不得转载.
#route中正确的配置 app_lucky_number: path: /lucky/number controller: App\AppBundle\Controller\LuckyController::number #php程序代码如下,路径:src/AppBundle/Controller/LuckyController.php <?php // src/AppBundle/Controller/LuckyController.php namespace App\AppBundle\Controller; use Symfony\Component\HttpFoundation\Response; class LuckyController { public function number() { return new Response( '<html><bod>bug</body></html>' ); } } #symfony框架可能报的错误: Fatal error: Cannot declare class AppBundle\Controller\LuckyController, because the name is already in use in D:\Htdocs\symfony\webapp\src\AppBundle\Controller\LuckyController.php on line 7 Fatal error: Uncaught RuntimeException: The autoloader expected class "App\AppBundle\Controller\LuckyController" to be defined in file "D:\Htdocs\symfony\webapp\vendor\composer/../../src\AppBundle\Controller\LuckyController.php". The file was found but the class was not in it, the class name or namespace probably has a typo. in D:\Htdocs\symfony\webapp\vendor\symfony\debug\DebugClassLoader.php on line 213 ( ! ) RuntimeException: The autoloader expected class "App\AppBundle\Controller\LuckyController" to be defined in file "D:\Htdocs\symfony\webapp\vendor\composer/../../src\AppBundle\Controller\LuckyController.php". The file was found but the class was not in it, the class name or namespace probably has a typo. in D:\Htdocs\symfony\webapp\vendor\symfony\debug\DebugClassLoader.php on line 213本文地址:http://www.04007.cn/article/711.html,未经许可,不得转载.
除了上面说的没有对route进行列出并解释app这个东西之外,symfony框架的action方法不知道是不是版本不同已经有改变了,YII框架中前端调用的方法名在控制器中要加上Action作为后缀,symfony框架中的这个action让人也觉得是这样的意思,特别是你在看到route配置中最后的方法只是number的时候你更不会去怀疑这个框架的天生思路,但是执行的时候是见了鬼了。看上面的代码,调用symfony框架请求/lucky/number执行的时候是执行number()方法,这时你看看网网上的介绍写的是numberAction方法。
总之,官网的文档确实不详甚至是不对(可能版本更新不及时),初次用起来真的是不爽。本文地址:http://www.04007.cn/article/711.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/711.html 未经许可,不得转载. 手机访问本页请扫描下方二维码:
|