Symfony 4 - Как исправить ошибку 404 Not Found для REST веб-API, где существуют маршруты?

Я пытаюсь реализовать REST API с помощью symfony 4. Моя проблема в том, что я не могу достичь своих маршрутов для моих методов GET и POST. Каждый раз, когда я пытаюсь, я получаю ошибку 404.

Но когда я пытаюсь получить свои маршруты на symfony, у меня есть:

Name                            Method   Scheme   Host   Path

app_statistics_poststatistics   POST     ANY      ANY    /api/stat
app_statistics_getstatistics    GET      ANY      ANY    /api/stat/{statId}

Итак, мои маршруты существуют, но я не могу до них добраться.

Я работаю над средой Windows с WAMP для работы локально.

Я уже пробовал свой api в среде с двумя окнами и в одной среде Linux с LAMP. Всегда получаю 404 Not Found.

Автор учебника сказал мне, что мой api работает на его компьютере, но у меня нет дополнительной информации о его среде. Итак, я ожидаю, что проблема возникнет из-за конфигурации моего виртуального хоста.

Вот мой виртуальный хост:

<VirtualHost *:80>
    ServerName statroche.fr
    ServerAlias www.statroche.fr
    DocumentRoot "D:/other/symfony/testRoche/public"
    <Directory "D:/other/symfony/testRoche/public">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

Важное примечание: у меня ничего нет в моей общедоступной папке, так как мне не нужна никакая страница, только API, мне все равно нужно помещать «общедоступный» в DocumentRoot и Directory?.

Я хотел бы получить доступ к своему API, а затем, например, для метода GET вернуть json. На самом деле я могу добраться до / моего проекта, но не могу добраться до других маршрутов.

Итак, если у вас нет index.php в папке public, у вас нет точки входа для запуска Symfony - видите ли вы обычную страницу приветствия при доступе к /?

Nico Haase 11.01.2019 14:15

Нет, я не вижу классическую страницу приветствия, но я могу подключиться к / с помощью +Indexes на моем виртуальном хосте

Fnx29 11.01.2019 14:18
Стоит ли изучать 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 нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
2
1 914
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Даже если вы не хотите создавать «веб-сайт старого стиля» с Symfony, вы должны использовать index.php для начальной загрузки Symfony и сделать API доступным.

Я создал новый проект, чтобы попробовать index.php в моей общей папке. Теперь это ошибка, которую я не могу понять. Вот ошибка NotAcceptableHttpException - No matching accepted Response format could be determined, относящаяся к моему файлу fos_rest.yaml

Fnx29 12.01.2019 19:59

Вместо

<Directory "D:/other/symfony/testRoche/public">

Укажите каталог apache Путь к основной папке вашего проекта Symfony следующим образом

<Directory "D:/other/symfony/testRoche">

Затем используйте файл .htaccess (поместите его в D:/other/symfony/testRoche/.htaccess, чтобы сделать общедоступный / index.php основной конечной точкой, если вы перейдете к http: // локальный: 80

Полная конфигурация apache

<VirtualHost *:80>
    ServerName statroche.fr
    ServerAlias www.statroche.fr
    DocumentRoot "D:/other/symfony/testRoche/public"
    <Directory "D:/other/symfony/testRoche/public">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

Файл .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

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