Symfony2:找不到“GET / lucky / number”

时间:2015-08-10 12:13:30

标签: php symfony symfony-2.7 symfony-routing

我开始教程(作为新手)并且每件事都可以正常工作,直到:

http://symfony.com/doc/current/book/page_creation.html#creating-a-page-route-and-controller步骤创建网页:路由和控制器

我创建了一个名为/var/www/html/[projekt]/src/AppBundle/Controller/LuckyController.php

的文件

但是当我打开http://[Server-IP]:8000/app_dev.php/lucky/number总是得到404:

No route found for "GET /lucky/number"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

[2/2] NotFoundHttpException: No route found for "GET /lucky/number"   +
[1/2] ResourceNotFoundException:    +

的routing.yml

app: 
    resource: "@AppBundle/Controller/" 
    type: annotation

控制器

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class LuckyController 
{ 

    /**
     * @Route("/lucky/number") 
     */
    public function numberAction() 
    { 
        $number = rand(0, 100);
        return new Response( '<html><body>Lucky number: '.$number.'</body></html>' ); 
    }
}

不知道错误在哪里......

错误 - 未捕获的PHP异常Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:“在/ var / www / html / [Symfony-Folder] / app /找不到”GET / lucky / number“的路由cache / dev / classes.php第2061行

php app/console debug:route
 [router] Current routes
 Name                     Method Scheme Host Path
 _wdt                     ANY    ANY    ANY  /_wdt/{token}
 _profiler_home           ANY    ANY    ANY  /_profiler/
 _profiler_search         ANY    ANY    ANY  /_profiler/search
 _profiler_search_bar     ANY    ANY    ANY  /_profiler/search_bar
 _profiler_purge          ANY    ANY    ANY  /_profiler/purge
 _profiler_info           ANY    ANY    ANY  /_profiler/info/{about}
 _profiler_phpinfo        ANY    ANY    ANY  /_profiler/phpinfo
 _profiler_search_results ANY    ANY    ANY  /_profiler/{token}/search/results
 _profiler                ANY    ANY    ANY  /_profiler/{token}
 _profiler_router         ANY    ANY    ANY  /_profiler/{token}/router
 _profiler_exception      ANY    ANY    ANY  /_profiler/{token}/exception
 _profiler_exception_css  ANY    ANY    ANY  /_profiler/{token}/exception.css
 _configurator_home       ANY    ANY    ANY  /_configurator/
 _configurator_step       ANY    ANY    ANY  /_configurator/step/{index}
 _configurator_final      ANY    ANY    ANY  /_configurator/final
 _twig_error_test         ANY    ANY    ANY  /_error/{code}.{_format}
 homepage                 ANY    ANY    ANY  /

11 个答案:

答案 0 :(得分:22)

我刚刚添加了

<?php

到文件&#34; LuckyNumberController&#34;它很有用....真的很奇怪。

谢谢大家

答案 1 :(得分:6)

试试这个网址:

http://[Server-IP]:8000/app_dev.php/en/lucky/number

Symfony Book中有一个错误:他们忘记了演示应用程序支持i18n。

只需添加&#34; / en &#34;路由之前的参数。

我知道这个问题已经结束但我希望我的回答可以帮助那些仍然面临这个问题的人。

答案 2 :(得分:4)

有时是缓存问题。尝试从/ project / var / cache / dev。

中删除 dev 文件夹

正如 authentictech 所说,您也可以尝试命令:

php bin/console cache:clear

如果要指定环境,则应添加--env = prod属性。

答案 3 :(得分:1)

您实际上并未扩展Symfony Controller类。它应该是类LuckyController扩展Controller

// src/AppBundle/Controller/LuckyController.php 
namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Response;

class LuckyController extends Controller {

     /** 
      * @Route("/lucky/number") 
      */ 
     public function numberAction() { 
         $number = rand(0, 100); 
         return new Response('<html><body>Lucky number: '.$number.'</body></html>');
     }

}

编辑:毕竟,这个问题的问题不在于扩展控制器,所以忽略我的答案。

答案 4 :(得分:0)

我将控制器复制并粘贴到现有的Symfony项目中,并立即显示路径。所以控制器没什么问题。

我还比较了routing.yml和它的相同。

唯一剩下的就是检查文件夹结构并确保不要将不同的Symfony项目混合在一起;也许您正在编辑正确的文件,但是从不同的路径启动Web服务器。

仔细检查或以完全不同的路径重建项目。由于您使用嵌入式Web服务器进行测试,因此您不需要将项目放入/ var / www / html(实际上最好不要这样做)。

答案 5 :(得分:0)

http://localhost:8080/ SymfonyProject /web/app_dev.php/lucky/number

它对我有用。将“SymfonyProject”更改为项目名称文件夹,或者如果项目由服务器直接指向,则将其删除。 还要注意适合你的端口(localhost:8080)。在我的情况下是8080,在你的可能是8000或其他。

答案 6 :(得分:0)

你可能会得到“没有找到”GET /运气/号码的路线“的另一个原因是因为你在@Route注释前面有一个标签。我认为我的代码编程与示例完全相同,并且得到了这个错误,但事实证明这是标签。

请参阅下面的代码,并注意第一个产生“No Route found ......”例外:

/**
 *  @Route("/lucky/number")
 */

 /**
 * @Route("/lucky/number")
 */

答案 7 :(得分:0)

如果其他人遇到这个问题:对我来说问题是双重的:

  1. 我忘了分配名称空间namespace AppBundle\Controller;
  2. 我没有为模板use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  3. 添加一个use语句

答案 8 :(得分:0)

有同样的问题,但原因完全不同于此处所示的那些......

不知怎的,我的演示没有定义默认的语言环境。似乎有许多配置可以解决这个问题,但我还不熟悉Symfony还没知道确切的原因。直到那时我的解决方案是简单地在URL中定义语言环境,例如:

/app_dev.php/的 EN /幸运/数

答案 9 :(得分:0)

扩展基类Controller对我来说不起作用。要解决这个问题,我必须在web / app.php中进行以下更改

$kernel = new AppKernel('prod', true);

此外,我必须在网址中添加“en”: http://scotchbox.demo/en/lucky/number

答案 10 :(得分:0)

如果您将Apache服务器与Symfony 4一起使用(而不是Symfony服务器),只需添加:

  

作曲家需要symfony / apache-pack

别忘了将您的文档根地址指向

  

其中/是/您的/ symfony /公共有

以Apache配置。