Маршруты Symfony 5.4 по аннотациям не работают

Я знаю, что этот вопрос обсуждался здесь миллион раз, но я уже третий день бьюсь над этим вопросом.

У меня есть приложение Symfony, разработанное на моем локальном ПК (Windows). Теперь я пытаюсь развернуть его на своем веб-хостинге Linux (Linux).

Мои маршруты инициируются в классах контроллеров через аннотации.

<?php

namespace App\Controller;

use App\Entity\Category;
use App\Repository\CategoryRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class IndexController extends AbstractController
{
    /**
     * @Route("/", name = "app_index")
     */
    public function index(): Response
    {
        return $this->render('index/index.twig', [
            'controller_name' => 'IndexController'
        ]);
    }
}

Проблема в том, что эти маршруты по какой-то причине не включены, что приводит к ошибке 404.

/config/services.yaml

services:
  _defaults:
    autowire: true
    autoconfigure: true

  App\:
    resource: '../src/'
    exclude:
      - '../src/DependencyInjection/'
      - '../src/Entity/'
      - '../src/Kernel.php'
...

/config/маршруты/аннотации.yaml

controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix:
      ru: '' # don't prefix URLs, the default locale
      en: '/en'

kernel:
    resource: ../../src/Kernel.php
    type: annotation

/config/routes.yaml пуст

symfony console debug:router показывает только маршруты администратора и профилировщика, но не мои, инициированные в контроллерах

Буду очень признателен, если вы поможете мне решить эту проблему.

Если я опишу индексный маршрут в route.yaml (что мне не нравится.. Для чего тогда аннотации?)

index:
    path: /
    controller: App\Controller\IndexController::index

Симфони сходит с ума "App\Controller\IndexController" has no container set, did you forget to define it as a service subscriber?

Все, что я сделал во время развертывания, было:

  1. клонировать репозиторий git с моим приложением на рабочем сервере
  2. установленные зависимости композитора
  3. перенесенная структура базы данных
  4. обновленный env с новым подключением к БД

Убедитесь, что файл config/routes/annotations.yaml существует. Это то, что говорит Symfony сканировать каталог вашего контроллера на наличие аннотированных маршрутов. Если его нет, создайте новый проект 5.4 и скопируйте из него файл.

Cerad 22.01.2023 18:12

А no container set — это совсем другое дело. Это просто означает, что ваши службы контроллера не подключены должным образом. Еще раз посмотрите, что есть в новом проекте 5.4, это должно помочь. Даже после того, как вы определите свои маршруты с помощью аннотаций, ошибка службы будет продолжаться. Начинаете подозревать, что вы пытаетесь обновить свое приложение, а также перенести его на Linux.

Cerad 22.01.2023 18:19

Эй, Церад! Annotations.yaml существует, я только что добавил его содержимое в вопрос. p.s. Я добавил symfony/apache-pack - без него даже маршруты профайлера не резолвятся p.p.s. Я обновил оба проекта во время этой борьбы, они вроде все одинаковые

Nik Demchenkov 22.01.2023 19:00

Итак, я не понял, что это проблема развертывания, хотя вы сказали это в своем вопросе. Вам необходимо следовать документации для вашего конкретного развертывания. Все может пойти не так. Убедитесь, что вы создали кеш для производства. И в производстве не будет никаких более профилирующих вещей.

Cerad 22.01.2023 19:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
140
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я надеюсь, что в service.yaml включена автоматическая проводка.

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

И, пожалуйста, прокомментируйте код в route.yaml И попробуйте с командой php bin/console cache:clear.

эй, спасибо за ваш отзыв! Да, включено (обновил пост). кеш: очистка не помогает :(

Nik Demchenkov 23.01.2023 09:19

@Bhavin Рад, что я не единственный, кто неправильно понял вопрос. Может показаться, что это приложение отлично работает на машине разработки, но не очень хорошо при развертывании. Симптомы очень странные. И ОП, кажется, странно неохотно раскрывает какие-либо подробности о том, как они развертываются, за исключением используемой операционной системы.

Cerad 23.01.2023 14:39

Ну, я не понимаю, что здесь действительно важно, потому что я новичок в symfony. Добавлены этапы депоймента. Причина, по которой я рассказал только о dev и prod системах, состоит в том, что этих предпринятых мной шагов было достаточно, чтобы сделать рабочую копию веб-приложения на той же машине dev.

Nik Demchenkov 23.01.2023 20:35
Ответ принят как подходящий

попробуйте с атрибутами PHP 8

#[Route('/', name: 'app_index')]

функция:

#[Route('/', name: 'app_index')] 
public function index(): Response {
    return $this->render('index/index.twig');
}

Документация:

https://www.php.net/manual/fr/language.attributes.overview.php

Большое спасибо. Это действительно помогло. У меня был PHP 7.4 на моем рабочем сервере. Обновил его до PHP8 и переписал маршруты в стиле атрибутов. Наконец это работает.

Nik Demchenkov 24.01.2023 12:25

С удовольствием

Yacine Maouche 24.01.2023 13:22

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