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 я забыл изменить имя маршрута в одном из методов. Так что будьте осторожны при копировании:)