我在 Symfony 4 的模块目录下创建了一个控制器类。我的包的路由文件引用了它。我的根目录的路由文件包括捆绑包的路由文件。
但是我收到错误 500,“错误:控制器既不作为服务也不作为类存在”。
为什么?
root/src/MyBundle/Resources/config/routing.YML
route_name:
path: /test3
controller: MyBundle\Controller\ExportCsvController::exportProductInCsv
options:
expose: true
root/config/routes/my_custom_routes.YML
route_name:
resource: "@MyBundle/Resources/config/routing.yml"
prefix: /
root/src/MyBundle/Controller/ExportCsvController.PHP
<?php
namespace MyBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ExportCsvController extends Controller
{
public function exportProductInCsv(): Response
{
return new Response(
'<html><body>test</body></html>'
);
}
}
这是缓存(Symfony 缓存)的问题。使用此命令解决:
php bin/console cache:clear --env=prod
。现在,文件的内容root/src/MyBundle/Resources/config/routing.YML
已被正确考虑:)。
我从同事那里得到的代码也遇到了同样的错误。经过尝试很多事情后我发现了问题:
class SomeController extends AbstractController
{
protected function __construct(
#[Autowire(param: "kernel.project_dir")]
private string $rootDir,
) {
}
受保护构造函数!