Symfony4注释路由不起作用

时间:2018-06-07 18:12:07

标签: symfony routing annotations symfony4

我刚开始学习Symfony。我完全关注this official tutorial。完成config/routes.yaml但使用annotations

时,路由工作正常
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Annotation\Route;

class LuckyController
{

    /**
     *  @Route("/lucky/number")
     */
    public function number(){

        $number = mt_rand(0, 100);

        return new Response(
            '<html><body><h1>MyLucky Number: ' . $number . '</h1></body></html>'
        );
    }
}

我收到此错误:

    Exception thrown when handling an exception
(Symfony\Component\Config\Exception\FileLoaderLoadException: [Semantical Error]
 The annotation "@Symfony\Component\Annotation\Route" in method 
App\Controller\LuckyController::number() does not exist, or could not be auto-loaded
 in C:\wamp\vhosts\mysymfony4\config/routes\../../src/Controller/ (which is
 being imported from "C:\wamp\vhosts\mysymfony4\config/routes/annotations.yaml"). Make sure
 annotations are installed and enabled.)

8 个答案:

答案 0 :(得分:7)

我发现了我的错误。我使用错误的命名空间进行路由。

Console.ReadLine() |> float

应该是:

use Symfony\Component\Annotation\Route;

修改 我想删除这个问题,但系统不会让我。

答案 1 :(得分:3)

我在标准apache网络服务器上的第一个Symfony 4项目遇到了相同的问题。

在我的公用文件夹中创建.htaccess文件可解决此问题。

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>

答案 2 :(得分:2)

确保您已将所需的类导入控制器。

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

答案 3 :(得分:2)

就我而言,添加“ apache bundle”解决了问题:

"composer require symfony/apache-pack"

如果通过/ public /在浏览器中运行symfony,则需要此。

答案 4 :(得分:0)

在公用文件夹中带有文件.htaccess的Symfony 4,可以解决路由注释问题。

答案 5 :(得分:0)

我想就symfony4中的注释错误提供其他建议:

我处理了这个问题:

我的项目没有config / routes / annotation.yaml,因此请创建该文件并编写以下行:

pattern  Freq     score rank  true_string
DT%E 37568 1138.4242    1  DTGE
%TGE 37666 1018.0000    2  DTGE
D%GE 37641 1017.3243    3  DTGE
DTG% 37665  965.7692    4  DTGE
%VGNE 34234  684.6800    5  SVGNE
SVGN% 34281  634.8333    6  SVGNE
SV%NE 34248  634.2222    7  SVGNE
SVG%E 34265  623.0000    8  SVGNE
%LGNE 41098  595.6232    9  SLGNE
SL%NE 41086  595.4493   10  SLGNE
SLGN% 41200  564.3836   11  SLGNE
SPT%AYNE 35082  539.7231   12  SPTAAYNE
SP%AAYNE 35094  531.7273   13  SPTAAYNE
SPTA%YNE 35061  531.2273   14  SPTAAYNE
SPTAA%NE 35225  518.0147   15  SPTAAYNE
SPTAAYN% 35144  516.8235   16  SPTAAYNE
%PTAAYNE 35111  516.3382   17  SPTAAYNE
S%TAAYNE 35100  516.1765   18  SPTAAYNE
SPTAAY%E 35130  509.1304   19  SPTAAYNE
SLG%E 41467  450.7283   20  SLGNE

答案 6 :(得分:0)

我遇到了同样的问题(在我的Symfony5项目中),但是我的错误是使用单引号而不是双引号来表示路线和路线名称。有时候,一些小小的愚蠢的错误会浪费您很多时间。顺便说一下,在SF4 / SF5中,我们应该避免使用FrameworkExtraBundle的路由。

Sensio\Bundle\FrameworkExtraBundle\Configuration\Route

我们应该使用symfony组件(路由/注释)。

use Symfony\Component\Routing\Annotation\Route;

答案 7 :(得分:-1)

确保安装annotationscomposer req annotations 这是我的问题,这里不再赘述。