gpt4 book ai didi

php - 如何在 Symfony 中使用 FosUserBundle 将用户管理器作为服务访问?

转载 作者:行者123 更新时间:2023-12-02 22:33:34 27 4
gpt4 key购买 nike

所以通常我可以通过执行以下操作来访问 Controller 中的用户管理器:

$this->get('fos_user.user_manager');

但是我需要在服务中访问它。所以这就是我所做的:

在我的 config.yml 文件中:

fos_user:
db_driver: orm
firewall_name: main
user_class: Main\UserBundle\Entity\User



services:
userbundle_service:
class: Main\UserBundle\Controller\UserBundleService
arguments: [@fos_user]

在我的 UserBundleService.php 中:

<?php
namespace Main\UserBundle\Controller;

use FOS\UserBundle\Entity\User;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Bridge\Monolog\Logger;



class UserBundleService
{

protected $securityContext;

public function __construct(User $user)
{
$this->user = $user;
}


public function validateRequest(){
$userManager = $this->container->get('fos_user.user_manager');
$this ->logger->warn("user is : ".$userManager);
exit;

}

}

我得到的错误是:

ServiceNotFoundException: The service "userbundle_service" has a dependency on a non-existent service "fos_user".

接下来我要做的是将 fos_user 作为服务移入我的 config.yml 中:

services:
userbundle_service:
class: Main\UserBundle\Controller\UserBundleService
arguments: [@fos_user2]

fos_user2:
user_class: Main\UserBundle\Entity\User

我得到错误:

RuntimeException: The definition for "fos_user2" has no class. If you intend to inject this service dynamically at runtime, please mark it as synthetic=true. If this is an abstract definition solely used by child definitions, please add abstract=true, otherwise specify a class to get rid of this error.

最佳答案

您必须使用与通常使用服务容器在 Controller 中获取的名称完全相同的名称注入(inject)服务:

services:
userbundle_service:
class: Main\UserBundle\Controller\UserBundleService
arguments: [@fos_user.user_manager]

你也可以在控制台中调用 app/console container:debug 并检查你有哪些容器

关于php - 如何在 Symfony 中使用 FosUserBundle 将用户管理器作为服务访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11810751/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com