Symfony4 Маршрутизация аннотаций не работает

Я только начал изучать Symfony. Я точно слежу за это официальное руководство. Маршрутизация работает нормально при использовании config/routes.yaml, но при использовании аннотации:

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.)

вы установили sensio/framework-extra-bundle?

Federkun 07.06.2018 21:03

@Federkun sensio / framework-extra-bundle установлен, согласно моему composer.json. Могу ли я предпринять какие-либо действия, которые отсутствуют в учебнике?

okey_on 07.06.2018 21:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
8
2
13 391
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Убедитесь, что вы импортировали необходимые классы в свой контроллер.

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

Ваши ответы работают. Есть идеи, почему в официальном руководстве используется Symfony\Component\Annotation\Route вместо Sensio\Bundle\FrameworkExtraBundle\Configuration\Route?

okey_on 07.06.2018 21:48

Поскольку FrameworkExtraBundle больше не используется в S4. Я был озадачен, что вы это приняли. "композитору требуется аннотация" - это все, что вам действительно нужно.

Cerad 07.06.2018 21:51

@Cerad Я сделал composer require annotation в соответствии с инструкциями в руководстве. Это не сработало

okey_on 08.06.2018 00:42

Хм. Вряд ли. Я только что произвел быструю установку, и она работает как положено. Вам действительно не нужно импортировать дополнительные классы пакета фреймворка. Просто маршрут symfony, как показывает исходный вопрос. Может, захочешь начать новый проект.

Cerad 08.06.2018 02:20
Ответ принят как подходящий

Я обнаружил свою ошибку. Я использовал неправильное пространство имен для маршрутизации.

use Symfony\Component\Annotation\Route;

Должно было быть:

use Symfony\Component\Routing\Annotation\Route;

Обновлено: Я хотел удалить этот вопрос, но система не позволяла.

Не удаляйте это это полезный вопрос.
SaidbakR 10.10.2018 21:29

Почему нас всегда сбивают с толку мелочи? Спасибо, что поделился.

klewis 02.05.2019 18:14

У меня была такая же проблема с моим первым проектом Symfony 4 на стандартном веб-сервере apache.

Создание файла .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>

Я добавил файл в общий / каталог, и мое приложение запустилось на прод-сервере;))

grantDEV 08.12.2018 01:45

Прежде чем проверять что-либо еще, попробуйте это решение! Лучшее предложение для нового проекта Symfony 4, особенно когда вы используете "php bin / console make: controller" для создания вашего первого контроллера.

dankilev 24.10.2019 11:45

В моем случае добавление пакета apache решило проблему:

"composer require symfony/apache-pack"

Вам это нужно, если вы запускаете Symfony в браузере через / public /.

Symfony 4 с файлом .htaccess в общей папке, решите проблему с помощью аннотации маршрутизации.

Хочу дать дополнительный совет по поводу ошибок аннотации в symfony4:

Я справился со своей проблемой с этим:

В моем проекте нет config / routes / annotation.yaml, поэтому создайте этот файл и напишите следующие строки:

// config/routes/annotations.yaml

controllers:
    resource: ../../src/Controller/
    type: annotation

У меня была такая же проблема, и добавление этого файла сработало для меня. Я не уверен, почему рецепт Flex не создал этот файл автоматически!

BenMorel 22.07.2019 11:47

При установке sensio/framework-extra-bundle создается config/routes/annotation.yaml.

nick 06.08.2019 13:36

Убедитесь, что вы установили библиотеку annotations с composer require annotations Это была моя проблема, а не другая, описанная здесь.

У меня была такая же проблема (в моем проекте Symfony5), но моя ошибка заключалась в использовании одинарных кавычек вместо двойных кавычек для маршрута и имени маршрута. Иногда маленькие глупые ошибки тратят много времени. Кстати, в SF4 / SF5 следует избегать использования маршрутизации FrameworkExtraBundle.

Sensio\Bundle\FrameworkExtraBundle\Configuration\Route

Мы должны использовать компонент Symfony (Маршрутизация / Аннотации).

use Symfony\Component\Routing\Annotation\Route;

Другие вопросы по теме