Symfony2:在实体类中获取 security.context

2024-04-22

是否可以得到security.context在实体类中?

我知道以下不起作用。我不知道如何实施$user part.

/**
 * Set createdAt
 *
 * @ORM\PrePersist
 */
public function setCreatedAt()
{
    $user = $this->get('security.context')->getToken()->getUser();

    $this->owner = $user->getId();
    $this->createdAt = new \DateTime();
    $this->updatedAt = new \DateTime();
}

对于日期时间:

对于时间戳,您可能最好使用 @hasLifeCycleCallback 注释和一些标记为 @prePersist 和 @preUpdate 的附加方法。 对于创建的,你甚至可以在 __constructor 本身中完成它。

请注意,您必须对 $updatedAt 属性使用 @preUpdate,@prePersist 仅适用于新实体。

如果您有很多实体需要此功能,您可以考虑使用 Doctrine2 侦听器来防止重复代码。

对于所有权财产:

如果您始终希望将实体的所有权设置为“当前登录的用户”,那么您最好使用 Doctrine2 侦听器或订阅者。 这样,您就不必将此逻辑添加到控制器或任何需要创建实体的地方。

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#onflush http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#onflush

按照文档创建侦听器服务,确保它使用构造函数获取安全上下文。 将其设置为 onFlush 事件,这样您就可以在实际保存之前调整实体。这是处理此类事情的最佳事件。

确保遵循 Doctrine 文档 onFlush 章节中的脚注,否则 Doctrine 将不会接收最后一刻的更改。

你的听众可能看起来像这样:

class FlushExampleListener
{
    public function onFlush(OnFlushEventArgs $eventArgs)
    {
        $em = $eventArgs->getEntityManager();
        $uow = $em->getUnitOfWork();

        foreach ($uow->getScheduledEntityInsertions() as $entity) {
            if ($entity instanceof YourClass) {
                // change owner
                $entity->setOwner($this->securityContext->getToken()->getUser());
                // tell doctrine you changed it
                $uow->recomputeSingleEntityChangeSet($em->getClassMetadata(get_class($entity)), $entity);
            }
        }

        foreach ($uow->getScheduledEntityUpdates() as $entity) {
            if ($entity instanceof YourClass) {
                // change owner
                $entity->setOwner($this->securityContext->getToken()->getUser());
                // tell doctrine you changed it
                $uow->recomputeSingleEntityChangeSet($em->getClassMetadata(get_class($entity)), $entity);
            }
        }
    }
}

请注意,这不会检查用户是否实际登录......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2:在实体类中获取 security.context 的相关文章

  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • C++ 相当于 PHP 的 pack()

    我的问题很简单 有没有类似 PHP 的pack and unpack C STL 中的函数 如果没有 是否有其他方法可以实现相同的目标 https www php net pack https www php net pack Thanks
  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • WordPress 安装中发现的恶意 PHP 代码有什么作用?

    我能够解码在一些 WordPress 文件中找到的以下 PHP 脚本 只是出于好奇 有人可以告诉我这段代码实际上是做什么的吗 看起来它已经以某种方式复制到同一服务器上的其他 WordPress 安装中
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝
  • 知道何时调用 persist

    我正在使用 Doctrine 2 作为我的 ORM 一切进展顺利 但我一直想知道EntityManager persist 方法 这 持久实体 https www doctrine project org projects doctrine
  • 为什么使用闭包进行赋值而不是直接将值赋给键?

    我当时正在看在 7 10 他添加了一个数据库依赖项并使用闭包来分配值 我的问题是为什么不直接使用直接赋值 我的意思是不这样做 container db capsule 相当于这样做 container db function contain
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • 如何在 Laravel 5 中的视图模板上显示会话数据

    我正在尝试在 Laravel 5 中的视图模板上显示会话数据 但是它似乎没有显示任何内容 这是我用来设置会话的代码 Session set bookingConfirmed BookingDates where id Session get
  • Opencart 的 $this->config->get('module_var_name')

    我正在尝试自定义 Opencart 支付模块 我看到很多地方都使用了配置信息 但我找不到任何创建正在使用的变量的内容 我知道在管理页面中 如果我选择 paypal 标准 我可以设置所有 配置 信息 但我找不到强调它的 模型 是否有模型 我希
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 使用php插入sql数据库时出错

    我有一个带有 MySQL 插入查询的程序 sql INSERT INTO people person id name username password email salt VALUES person id name username p
  • Laravel 类邮件程序不存在

    我将应用程序从 5 更新到 5 2 现在 当我调用 Mail send 时 它会返回一个异常 Class mailer 不存在 Mail send emails mail data gt content function m use to
  • Laravel 上传前如何压缩图像?

    我正在制作一个图片库网站 用户可以在其中上传任何图像 它们将显示在前端 我需要在不影响图像质量的情况下压缩图像 以减小图像大小 以便页面加载速度不会影响那么大 我使用以下代码来上传图像 rules array file gt require
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • PHP:展平数组-最快的方法? [复制]

    这个问题在这里已经有答案了 是否有任何快速方法可以在不运行 foreach 循环的情况下展平数组并选择子键 在本例中为 键 和 值 或者 foreach 始终是最快的方法 Array 0 gt Array key gt string val
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要

随机推荐