php - Symfony 2.0 在实体内部获取服务

标签 php service symfony doctrine-orm entity

我正在搜索并找不到答案。 我的应用程序中有数据库角色模型。用户可以有一个角色,但这个角色必须存储到数据库中。

但是用户需要从数据库中添加默认角色。所以我创建了一个服务:

<?php

namespace Alef\UserBundle\Service;

use Alef\UserBundle\Entity\Role;

/**
 * Description of RoleService
 *
 * @author oracle
 */
class RoleService {

    const ENTITY_NAME = 'AlefUserBundle:Role';

    private $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function findAll()
    {
        return $this->em->getRepository(self::ENTITY_NAME)->findAll();
    }

    public function create(User $user)
    {
        // possibly validation here

        $this->em->persist($user);
        $this->em->flush($user);
    }

    public function addRole($name, $role) {
        if (($newrole = findRoleByRole($role)) != null)
            return $newrole;
        if (($newrole = findRoleByName($name)) != null)
            return $newrole;

        //there is no existing role
        $newrole = new Role();
        $newrole->setName($name);
        $newrole->setRole($role);

        $em->persist($newrole);
        $em->flush();

        return $newrole;
    }

    public function getRoleByName($name) {
        return $this->em->getRepository(self::ENTITY_NAME)->findBy(array('name' => $name));
    }

    public function getRoleByRole($role) {
        return $this->em->getRepository(self::ENTITY_NAME)->findBy(array('role' => $role));
    }

}

我的 services.yml 是:

alef.role_service:
    class: Alef\UserBundle\Service\RoleService
    arguments: [%doctrine.orm.entity_manager%]

现在我想在两个地方使用它: UserControllerUser 实体。我怎样才能让它们进入实体? 至于 Controller ,我想我只需要:

$this->get('alef.role_service');

但是如何在实体内部获取服务?

最佳答案

你没有。这是一个很常见的问题。实体应该只知道其他实体,而不是实体管理器或其他高级服务。过渡到这种开发方式可能有点挑战,但通常是值得的。

您要做的是在加载用户时加载角色。通常,您最终会得到一个执行此类操作的 UserProvider。您是否阅读过有关安全的部分?这应该是你的起点:

http://symfony.com/doc/current/book/security.html

关于php - Symfony 2.0 在实体内部获取服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330704/

相关文章:

php - 如何添加自定义 "under maintenance"页面?

c++ - 在模块列表中缺少应用程序的服务上进行 VS2010 C++ 远程调试

android - android服务和web服务有什么区别

java - 当设备进入休眠状态时如何继续服务?

php - 在 symfony2 Controller 中使用 usort 和关联数组

php - Symfony 不会缓存 Controller 上的更改

php - 限制对 PHP 管理按钮的访问

javascript - lang 选项在 WordPress 中不起作用

php - 登录时尝试设置 session 数据

php - 使用 MySQL 在 PHP 中生成的特定列的每个值后的图标