Symfony4: не найден маршрут для "GET /lucky/number"

Я начинаю играть с symfony4. Я только что создал новое приложение и создаю новый LuckyController. Он работает с маршрутами, настроенными следующим образом:

lucky:
    path: /lucky/number
    controller: App\Controller\LuckyController::number

Со следующим контроллером:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number()
    {
        return new Response('<html><head></head><body>' . rand(111, 999) . '</body></html>');
    }
}

Но я хочу использовать аннотации. Поэтому я решил прокомментировать маршруты. Ямл. Следующая документация, которая объясняет, как создать маршрут в Symfony, я сделал это:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class LuckyController extends Controller
{
    /**
     * @Route("/lucky/number")
     */
    public function number()
    {
        return new Response('<html><head></head><body>' . rand(111, 999) . '</body></html>');
    }
}

Маршрут не найден

1 ответ

Решение

В Symfony4 нужно установить annotations расслоение.

Запустите эту команду composer require annotations

Иногда эта проблема возникает из-за кеша. Вам нужно запустить php bin/console cache:clear.то будет работать нормально.

У меня было то же самое, когда я пробовал аннотации, затем я обнаружил, что с установленной демонстрацией (блогом) вам нужно добавить язык в URL-адрес. Итак, в документации говорится:

http://localhost:8000/lucky/number будет работать точно так же, как раньше

Это не сработало. Однако это произошло:

http://localhost:8000/en/lucky/number

Как было предложено в ответе @Jack70.

https://127.0.0.1:8000/en/random/number

Это должно работать.

Если вы запустите команду php bin/console debug:router он покажет вам список доступных маршрутов, как вы можете видеть в этом списке, вам нужно добавить локаль (язык) в качестве первого аргумента.

app_annotationsample_number ANY ANY ANY /{_locale}/random/number

Если вы используете аннотации - вам нужно проверить config / routes / anotations.yaml. Вам нужно проверить путь к вашему контроллеру или добавить новый путь, например:

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

Кроме того, вы получите эту ошибку, если имя маршрута появится более одного раза.

Я столкнулся с этой ошибкой при разработке приложения Angular, поэтому для отладки я попробовал тот же маршрут в Postman, который, как я знал, работал нормально, но на этот раз он не выдал упомянутую ошибку. К счастью, я только что добавил один новый контроллер, поэтому найти виновника было легко: проблема заключалась в том, что после копирования методов с веб-контроллера на контроллер api я забыл изменить имя маршрута в одном из методов. Так что будьте осторожны при копировании:)

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