Symfony2:找不到 "GET /lucky/number" 的路由
Symfony2: No route found for "GET /lucky/number"
我开始教程(作为新手)并且一切正常,直到:
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:"No route found for "GET /lucky/number"" 在 /var/www/html/[Symfony-Folder] /app/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 /
你实际上并没有扩展 Symfony 控制器 class。应该是 class LuckyController extends 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>');
}
}
编辑:毕竟,这个问题的问题不在于扩展控制器,所以请忽略我的回答。
我将你的控制器复制并粘贴到一个现有的 Symfony 项目中,路由立即出现。所以控制器没有问题。
我也对比了routing.yml,是一样的
唯一剩下的就是检查文件夹结构并确保您没有将不同的 Symfony 项目混合在一起;也许您正在编辑正确的文件,但从不同的路径启动网络服务器。
仔细检查或在完全不同的路径中重建项目。由于您正在使用嵌入式 Web 服务器进行测试,因此您不需要将项目放入 /var/www/html(实际上最好不要)。
我刚刚添加了一个
<?php
到文件 "LuckyNumberController" 并且它有效....真的很奇怪。
谢谢大家
试试这个 URL:
http://[Server-IP]:8000/app_dev.php/en/lucky/number
Symfony Book 中有一个错误:他们忘记了演示应用程序支持 i18n。
只需在路由参数前添加“/en”参数即可
我知道这个问题已经结束了,但我希望我的回答可以帮助其他仍然面临这个问题的人。
http://localhost:8080/SymfonyProject/web/app_dev.php/lucky/number
对我有用。将 "SymfonyProject" 更改为您的项目名称文件夹,如果您的项目直接由服务器指向,则将其删除。
还要注意适合您的端口 (localhost:8080)。在我的情况下是 8080,在你的情况下可能是 8000 或其他。
你可能得到 "No route found for "GET /luck/number" 的另一个原因是你在 @Route
注释前面有一个选项卡。我以为我编写的代码与示例完全一样, 并收到此错误,但结果是标签。
查看下面的代码,注意第一个代码产生 "No Route found..." 异常:
/**
* @Route("/lucky/number")
*/
/**
* @Route("/lucky/number")
*/
有时是缓存问题。尝试从 /project/var/cache/dev.
中删除 dev 文件夹
如authentictech所说,您也可以尝试以下命令:
php bin/console cache:clear
如果要指定环境,应该加上--env=prod 属性.
以防其他人遇到这个问题:对我来说问题是双重的:
- 我忘记分配命名空间
namespace AppBundle\Controller;
- 我没有为模板添加 use 语句
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
有同样的问题,但原因与目前为止显示的完全不同...
我的演示不知何故没有定义默认语言环境。似乎有许多配置可以解决这个问题,但我对 Symfony 还不够熟悉,还不知道确切的原因。到那时我的解决方案是简单地在 URL 中定义语言环境,例如:
/app_dev.php/zh/lucky/number
扩展基础 class 控制器对我不起作用。为了解决这个问题,我必须在 web/app.php
中进行以下更改
$kernel = new AppKernel('prod', true);
我还必须在 url 中添加 'en':
http://scotchbox.demo/en/lucky/number
如果您在 Symfony 4 中使用 apache 服务器(不是 Symfony 服务器),只需添加:
composer require symfony/apache-pack
不要忘记将您的文档根地址指向
where/is/your/symfony/public
在 apache 配置中。
我开始教程(作为新手)并且一切正常,直到:
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:"No route found for "GET /lucky/number"" 在 /var/www/html/[Symfony-Folder] /app/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 /
你实际上并没有扩展 Symfony 控制器 class。应该是 class LuckyController extends 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>');
}
}
编辑:毕竟,这个问题的问题不在于扩展控制器,所以请忽略我的回答。
我将你的控制器复制并粘贴到一个现有的 Symfony 项目中,路由立即出现。所以控制器没有问题。
我也对比了routing.yml,是一样的
唯一剩下的就是检查文件夹结构并确保您没有将不同的 Symfony 项目混合在一起;也许您正在编辑正确的文件,但从不同的路径启动网络服务器。
仔细检查或在完全不同的路径中重建项目。由于您正在使用嵌入式 Web 服务器进行测试,因此您不需要将项目放入 /var/www/html(实际上最好不要)。
我刚刚添加了一个
<?php
到文件 "LuckyNumberController" 并且它有效....真的很奇怪。
谢谢大家
试试这个 URL:
http://[Server-IP]:8000/app_dev.php/en/lucky/number
Symfony Book 中有一个错误:他们忘记了演示应用程序支持 i18n。
只需在路由参数前添加“/en”参数即可
我知道这个问题已经结束了,但我希望我的回答可以帮助其他仍然面临这个问题的人。
http://localhost:8080/SymfonyProject/web/app_dev.php/lucky/number
对我有用。将 "SymfonyProject" 更改为您的项目名称文件夹,如果您的项目直接由服务器指向,则将其删除。 还要注意适合您的端口 (localhost:8080)。在我的情况下是 8080,在你的情况下可能是 8000 或其他。
你可能得到 "No route found for "GET /luck/number" 的另一个原因是你在 @Route
注释前面有一个选项卡。我以为我编写的代码与示例完全一样, 并收到此错误,但结果是标签。
查看下面的代码,注意第一个代码产生 "No Route found..." 异常:
/**
* @Route("/lucky/number")
*/
/**
* @Route("/lucky/number")
*/
有时是缓存问题。尝试从 /project/var/cache/dev.
中删除 dev 文件夹如authentictech所说,您也可以尝试以下命令:
php bin/console cache:clear
如果要指定环境,应该加上--env=prod 属性.
以防其他人遇到这个问题:对我来说问题是双重的:
- 我忘记分配命名空间
namespace AppBundle\Controller;
- 我没有为模板添加 use 语句
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
有同样的问题,但原因与目前为止显示的完全不同...
我的演示不知何故没有定义默认语言环境。似乎有许多配置可以解决这个问题,但我对 Symfony 还不够熟悉,还不知道确切的原因。到那时我的解决方案是简单地在 URL 中定义语言环境,例如:
/app_dev.php/zh/lucky/number
扩展基础 class 控制器对我不起作用。为了解决这个问题,我必须在 web/app.php
中进行以下更改$kernel = new AppKernel('prod', true);
我还必须在 url 中添加 'en': http://scotchbox.demo/en/lucky/number
如果您在 Symfony 4 中使用 apache 服务器(不是 Symfony 服务器),只需添加:
composer require symfony/apache-pack
不要忘记将您的文档根地址指向
where/is/your/symfony/public
在 apache 配置中。