Symfony 4设置问题(路由器异常)

Vor*_*ron 3 php symfony

我试图获得Symfony 4设置.我按照此处列出的教程进行了操作:https://symfony.com/doc/4.0/setup.html

但是,当我尝试运行服务器时,我得到: 在此输入图像描述

我没有改变任何东西,作曲家似乎抓住了所有必要的依赖.我之前运行PHP进行检查,没有任何重要的缺失:

在此输入图像描述

我真的被困在这里,因为这段代码应该正常工作(它适用于我认识的任何人)并且它来自一个可以检查它的来源.

Update: Result from console from running router debug: 
 -------------------------- -------- -------- ------ -----------------------------------
  Name                       Method   Scheme   Host   Path
 -------------------------- -------- -------- ------ -----------------------------------
  _twig_error_test           ANY      ANY      ANY    /_error/{code}.{_format}
  _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_phpinfo          ANY      ANY      ANY    /_profiler/phpinfo
  _profiler_search_results   ANY      ANY      ANY    /_profiler/{token}/search/results
  _profiler_open_file        ANY      ANY      ANY    /_profiler/open
  _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
 -------------------------- -------- -------- ------ -----------------------------------
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

Symfony\Component\Routing\Exception\ResourceNotFoundException:

  at var/cache/dev/srcDevDebugProjectContainerUrlMatcher.php:107
  at srcDevDebugProjectContainerUrlMatcher->match('/')
     (vendor/symfony/routing/Matcher/UrlMatcher.php:95)
  at Symfony\Component\Routing\Matcher\UrlMatcher->matchRequest(object(Request))
     (vendor/symfony/routing/Router.php:262)
  at Symfony\Component\Routing\Router->matchRequest(object(Request))
     (vendor/symfony/http-kernel/EventListener/RouterListener.php:114)
  at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(TraceableEventDispatcher))
  at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent), 'kernel.request', object(TraceableEventDispatcher))
     (vendor/symfony/event-dispatcher/Debug/WrappedListener.php:104)
  at Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))
     (vendor/symfony/event-dispatcher/EventDispatcher.php:212)
  at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener)), 'kernel.request', object(GetResponseEvent))
     (vendor/symfony/event-dispatcher/EventDispatcher.php:44)
  at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
     (vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:139)
  at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
     (vendor/symfony/http-kernel/HttpKernel.php:125)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:190)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:37)


    Symfony\Component\HttpKernel\Exception\NotFoundHttpException:
No route found for "GET /" (from "http://localhost/my-project/")

  at vendor/symfony/http-kernel/EventListener/RouterListener.php:144
  at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(TraceableEventDispatcher))
  at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent), 'kernel.request', object(TraceableEventDispatcher))
     (vendor/symfony/event-dispatcher/Debug/WrappedListener.php:104)
  at Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))
     (vendor/symfony/event-dispatcher/EventDispatcher.php:212)
  at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener)), 'kernel.request', object(GetResponseEvent))
     (vendor/symfony/event-dispatcher/EventDispatcher.php:44)
  at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
     (vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:139)
  at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
     (vendor/symfony/http-kernel/HttpKernel.php:125)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:190)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:37)
Run Code Online (Sandbox Code Playgroud)

Cer*_*rad 7

自从新的Symfony Flex安装过程发布以来,出现了类似的几个问题.不确定我已经看到了一个很好的答案,但基本上是一个怪癖.

假设您安装基本框架和Web服务器,然后检查路由:

composer create-project symfony/skeleton skeleton
cd skeleton
composer require server
bin/console debug:router

------ -------- -------- ------ ------ 
Name   Method   Scheme   Host   Path  
------ -------- -------- ------ ------
Run Code Online (Sandbox Code Playgroud)

因此,没有开箱即用的路线.您可以通过查看config/routes.yaml或空的src/Controller目录来确认这一点.

那么,如果启动服务器并导航到浏览器中,您会期望什么?当然没有找到路线.相反,令人惊讶的是,你实际上得到的东西看起来像一个欢迎页面.嗯.它来自哪里?实际的FrameWork包中没有任何东西可以生成它.

相反,您需要深入了解http内核组件,看看在没有定义路由时尝试匹配路由时会发生什么.最终你最终进入:

namespace Symfony\Component\HttpKernel\EventListener;
class RouterListener implements EventSubscriberInterface
    try {
        // matching a request is more powerful than matching a URL path + context, so try that first
        if ($this->matcher instanceof RequestMatcherInterface) {
            $parameters = $this->matcher->matchRequest($request);
    } catch (ResourceNotFoundException $e) {
        if ($this->debug && $e instanceof NoConfigurationException) {
            $event->setResponse($this->createWelcomeResponse());
Run Code Online (Sandbox Code Playgroud)

基本上,如果您尝试匹配路由并且未配置路由器(换句话说,未定义路由),则会显示欢迎页面.究竟为什么Symfony开发人员这样做可能有点神秘.只是需要接受的东西.

现在安装探查器并检查路由.

composer req profiler
bin/console debug:router
-------------------------- -------- -------- ------ ----------------------------------- 
Name                       Method   Scheme   Host   Path                               
-------------------------- -------- -------- ------ ----------------------------------- 
_twig_error_test           ANY      ANY      ANY    /_error/{code}.
    {_format}           
_wdt                       ANY      ANY      ANY    /_wdt/{token}                      
_profiler_home             ANY      ANY      ANY    /_profiler/                        
...
Run Code Online (Sandbox Code Playgroud)

我们有路线.没有特定的应用程序或框架,但现在配置了路由系统.如果我们刷新浏览器,欢迎页面会被相当不祥的Route Not Found异常神秘地取代.

如果您安装定义路由(例如安全捆绑包)的其他捆绑包,则会发生同样的情况.当然,symfony/website-skeleton定义了一堆internel路由.但不是GET /.

TLDR:默认情况下没有定义GET /路由,即使它看起来像它.您需要自己添加它.