Задать вопрос

Ошибка 404 — почему не работает роутинг/контроллер/шаблон?

Учебный, максимально простой проект. Ошибка скорее всего банальная, что то недосмотрел.
Использую PhpStorm + плагин для symfony (автоподстановка путей и т.д.).
Сайт на OpenServer по адресу symfony.local
PHP 8.1

Установил
composer create-project symfony/skeleton:"6.2.*" my_project_directory
composer update symfony/flex --no-plugins --no-scripts
composer require twig
composer require doctrine
composer require apache-pack
composer require symfony/asset
composer require maker

перенес фреймворк из папки my_project_directory в кореневую symfony.local
Создал тестовый контроллер и вид. Всё работало.
Прописывал роутинги - как комментарии, как атрибуты в ямл файле (пробовал всё) - всё работало.
Удалил всё что написал.
Начал создавать контроллеры.

Контроллер
src\Controller\CategoryController.php
<?php

namespace App\Controller;

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

class CategoryController extends AbstractController
{
    #[Route('/category', name: 'add_category')]
    public function addCategory(): Response
    {
        return $this->render('category/index.html.twig', [
            'controller_name' => 'CategoryController',
        ]);
    }
}


Вид
\src\templates \category\index.html.twig
{% extends 'base.html.twig' %}

{% block title %}Hello CategoryController!{% endblock %}

{% block main_cont %}
<h1>Category</h1>
{% endblock %}


В результате ошибка 404. К сожалению, симфони даже не говорит, где ошибка.
Плагин в шторме подсказывает пути, так что вряд ли дело в них.
Предполагаю, что что то в роутинге т.к. 404 не может что то найти.
Как это исправить?
  • Вопрос задан
  • 279 просмотров
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 3
Убедится в корректности конфигурирования роутов можно командой:
php bin/console debug:router

Дока
Ответ написан
thewind
@thewind
php программист, front / backend developer
Вы пишите, что настраивали роутинг через yaml файлы? А этот роут вы прописали как аннотацию / атрибут. Может вам надо в конфиге фреймворка указать, что роутинг должен браться из annotations?
Ответ написан
logpol32
@logpol32 Автор вопроса
Долго искал в гугле, пробовал разные варианты и вот что сработало.
Нужно было:

1) в корень сайта положить файл .htaccess с содержимым:
Options -Indexes
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L,QSA]


2) в папку public положить файл .htaccess с содержимым:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]


Работает. Открывает нужные страницы.

PS
Но я всё ещё не понимаю правильно ли это (так вообще делают? в других системах и фреймворках такого не встречал) и почему это не было сделано автоматически, при установке symfony, пакетов и т.д.?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы