Symfony 4.4如何在没有自动布线的情况下配置控制器
我需要将服务注入控制器构造函数方法 服务中心Symfony 4.4如何在没有自动布线的情况下配置控制器,symfony,dependency-injection,Symfony,Dependency Injection,我需要将服务注入控制器构造函数方法 服务中心 imports: - { resource: controllers.yaml } services: _defaults: autowire: false autoconfigure: false public: false App\: resource: '../src/*' exclude: '../src/{Application/M
imports:
- { resource: controllers.yaml }
services:
_defaults:
autowire: false
autoconfigure: false
public: false
App\:
resource: '../src/*'
exclude: '../src/{Application/Message,Infrastructure/Repository/MySql/Migrations,Tests,Kernel.php}'
A.yaml
app.controller:
class: App\UI\Controller\AppController
arguments:
- '@monolog.logger.api'
tags: ['controller.service_arguments']
app.controller.keyword:
class: App\UI\Controller\BlogController
arguments:
- '@monolog.logger.api'
tags: ['controller.service_arguments']
BlogController.php
class BlogController extends AbstractController
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function postForSubscribers(Request $request, FindPostQuery $query): JsonResponse
{
$page = $request->query->get('page') ?? 1;
$limit = $request->query->get('limit') ?? 500;
$daysBack = $request->query->get('days-back') ?? '7';
try {
$results = $query->getResults($daysBack, new Paging((int)$page, (int)$limit));
return new JsonResponse($results->normalize());
} catch (Exception $e) {
$this->logger->warning($e->getMessage(), [
'line' => $e->getLine(),
'file' => $e->getFile(),
'trace' => $e->getTraceAsString(),
]);
return new JsonResponse(['error' => 'Something broken, cant fetch post data.'], 500);
}
}
}
操作postForSubscribers
returnURI“/api/v1/post/subscribers”的控制器不可调用。无法从容器中获取控制器“App\UI\Controller\BlogController”,因为它是私有的。您是否忘记用“controller.service\u arguments”标记服务?
但是controllers.yaml包含控制器标签,我应该如何配置控制器?
有人能帮忙吗
当我添加到service.yaml时,请注意:
App\UI\Controller\:
resource: '../src/UI/Controller'
tags: ['controller.service_arguments']
我得到:
函数App\UI\Controller\BlogController的参数太少::\uu construct(),在第13行的/var/www/html/var/cache/dev/ContainerV9lwkz0/getBlogControllerService.php中传递了0,正好是预期的1个
,因为我看到您没有从默认配置中排除控制器,请在此处添加排除项:
exclude: '../src/{Application/Message,Infrastructure/Repository/MySql/Migrations,Tests,Kernel.php}'
这不是必需的,但这可能会覆盖您的手动配置。(这取决于哪个是第一位)
然后,关注autowire
参数,如果此参数为false,则必须使用参数手动注入依赖项
-请参阅和
祝你好运 首先,需要在每个service.yaml文件中复制_defaults部分。可能还有其他问题。不幸的是,我还有8个不同的导入yaml文件
命令
,查询
,存储库
等。除控制器外的所有功能都很完美。在原始controllers.yaml文件中,将“app.controller”id替换为控制器类名并设置为public:true。以及将您的控制器从您的默认services.yaml中排除,如下所述。在脱离主题时,如果您确实有那么多文件,则将自己设置为config/services目录,并在Kernel.php中添加一行以加载该目录中的任何文件。无需导入。