【问题标题】:Symfony 5.4 routes by annotations not workingSymfony 5.4 通过注释路由不起作用
【发布时间】:2023-02-21 17:58:25
【问题描述】:

我知道这个问题已经在这里被讨论了数百万次,但这是我在这个问题上苦苦挣扎的第三天。

我在本地 PC (Windows) 上开发了 symfony 应用程序。现在我正在尝试将它部署在我的 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/routes/annotations.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 仅显示行政剖析器路线但不是我的在控制器中启动

如果您能帮我解决这个问题,我将不胜感激。

如果我在中描述索引路线路线.yaml(我不喜欢......那么注释是干什么用的?)

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

symfony 疯狂 "App\Controller\IndexController" has no container set, did you forget to define it as a service subscriber?

我在部署期间所做的一切是:

  1. 在生产服务器上使用我的应用程序克隆 git repo
  2. 已安装作曲家依赖项
  3. 迁移的数据库结构
  4. 使用新的数据库连接更新了环境

【问题讨论】:

  • 验证文件 config/routes/annotations.yaml 是否存在。这就是告诉 Symfony 扫描您的控制器目录以查找带注释的路由。如果不存在,则创建一个新的 5.4 项目并从中复制文件。
  • no container set 是一个完全不同的问题。这只是意味着您没有正确自动连接控制器服务。再次查看新的 5.4 项目应该有所帮助。即使您通过注释定义了路由,服务错误仍将继续。开始怀疑您正在尝试更新您的应用程序并将其移至 Linux。
  • 嘿,塞拉德! annotations.yaml 存在,我刚刚在问题中添加了它的内容。附:我已经添加了 symfony/apache-pack - 没有它甚至无法解析分析器路由 p.p.s.我在这场斗争中更新了这两个项目,它们似乎都是一样的
  • 好的,即使您在问题中说过,我也没有意识到这是一个部署问题。您需要遵循特定部署的文档。各种各样的事情都可能出错。确保您为生产构建了缓存。生产中不会有任何分析器的东西。

标签: linux apache symfony


【解决方案1】:

尝试使用 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 并将路由重写为属性样式。最后它起作用了。
  • 我的荣幸
【解决方案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.

并请评论代码路线.yaml并尝试使用 php bin/console cache:clear 命令。

【讨论】:

  • 嘿,谢谢你的反馈!是的,它已启用(更新了帖子)。缓存:清除没有帮助:(
  • @Bhavin 很高兴我不是唯一误解这个问题的人。看起来这个应用程序在开发机器上运行良好,但在部署时效果不佳。症状很奇怪。奇怪的是,除了正在使用的操作系统之外,OP 似乎不愿意透露有关他们如何部署的任何细节。
  • 好吧,我不知道这里真正重要的是什么,因为我是 symfony 的新手。添加了部署步骤。我之所以只介绍开发和生产系统,是因为我采取的这些步骤足以在同一台开发机器上制作 Web 应用程序的工作副本
【解决方案3】:

您必须要求:

composer require symfony/apache-pack

之后只需将 FollowSymLinks 更改为 SymLinksIfOwnerMatch ... 和“vu à la” ...此包重新配置 Apache 网络服务器的代码 ...

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 2022-08-14
    • 2023-03-18
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多