使整个symfony应用程序只读

时间:2017-02-26 07:11:42

标签: doctrine symfony

我需要设置一个Symfony应用程序的现场演示。

如何将所有内容都设为只读?用户应该能够尝试所有功能,但不能让其他人看到任何持久性更改。

我可以删除对mysql用户的INSERT和UPDATE权限,但是当他们尝试保存某些内容时,这将是一个丑陋的错误500 ...

3 个答案:

答案 0 :(得分:2)

快速而肮脏的方式让您的整个应用程序只读。

<强>的appbundle / EventSubscriber / EntitySubscriber.php

namespace AppBundle\EventSubscriber;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\PreFlushEventArgs;


class EntitySubscriber implements EventSubscriber
{    
    public function getSubscribedEvents()
    {
        return [
            'preFlush'
        ];
    }

    public function preFlush(PreFlushEventArgs $args)
    {
        $entityManager = $args->getEntityManager();
        $entityManager->clear();
    }
}

<强> services.yml

app.entity_subscriber:
    class: AppBundle\EventSubscriber\EntitySubscriber
    tags:
        - { name: doctrine.event_subscriber, connection: default }

答案 1 :(得分:0)

我想你已经成功了。但如果没有:

  1. 使用虚拟数据库。从原始数据库复制它。让他们玩。不需要时放下它。
  2. 如果您无法访问数据库创建和丢弃,您仍然可以执行此操作。只需在Doctrine实体中为表名添加临时前缀即可。无需重写整个应用程序,只需几行。运行迁移以创建新表。随时随地丢弃它们。
  3. 使用虚拟机。在节目之前制作快照。在节目结束后回滚到保存的快照。
  4. 这些或多或少都是简单的方法,它们与平台无关。

    根据Symfony应用程序级别更改此选项可能有两个缺点之一。你要么不保存任何东西,因此你的演示不能很好地展示给顾客。或者你必须对代码进行大量操作,并在演出结束后立即抛出这些巨大的工作。

答案 2 :(得分:0)

也许您可以使用Session来执行此操作或使用可在Symfony中实现的Memcache(Web上提供了一些示例)。希望这会有所帮助。