22

我开始教程(作为新手),一切正常,直到:

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:    +

路由.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/cache/dev/classes 中找不到“GET /lucky/number”的路由”。 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  /
4

11 回答 11

22

我刚刚添加了一个

<?php

到文件“LuckyNumberController”,它的工作原理......真的很奇怪。

谢谢大家

于 2015-08-11T06:04:24.237 回答
7

试试这个网址:

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

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

只需在路由参数之前添加“ /en ”参数即可。


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

于 2015-11-02T04:24:24.877 回答
5

有时是缓存问题。尝试从 /project/var/cache/dev中删除dev文件夹。

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

php bin/console cache:clear

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

于 2016-02-08T06:59:29.100 回答
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>');
     }

}

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

于 2015-08-10T12:30:58.730 回答
0

我将你的控制器复制并粘贴到一个现有的 Symfony 项目中,路由立即出现。所以控制器没有问题。

我还比较了routing.yml,它是一样的。

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

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

于 2015-08-10T16:46:25.470 回答
0

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

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

于 2016-01-11T15:32:19.893 回答
0

您可能会收到“未找到“GET /luck/number”的路由的另一个原因是因为注释前面有一个选项卡@Route。我以为我编写的代码与示例完全一样,并且遇到了这个错误,但结果是这是标签。

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

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

 /**
 * @Route("/lucky/number")
 */
于 2016-02-07T06:39:23.080 回答
0

万一其他人遇到这个问题:对我来说,问题是双重的:

  1. 我忘了分配命名空间namespace AppBundle\Controller;
  2. 我没有为模板添加使用语句use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
于 2016-03-04T19:55:32.287 回答
0

有同样的问题,但与目前显示的完全不同的原因......

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

/app_dev.php/ en /lucky/number

于 2016-06-11T19:47:28.517 回答
0

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

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

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

于 2017-05-31T11:30:04.530 回答
0

如果您使用带有 Symfony 4 的 apache 服务器(不是 Symfony 服务器),只需添加:

作曲家需要 symfony/apache-pack

不要忘记将您的文档根地址

在哪里/是/你的/symfony/公共

在apache配置中。

于 2019-11-12T02:31:47.583 回答