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