2017-02-26 60 views
0

我需要设置一个Symfony应用程序的现场演示。使整个symfony应用程序只读

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

我可以删除INSERT和UPDATE权限给mysql用户,但是当他们试图保存的东西,这将是一个丑陋的错误500 ...

+0

不要在数据库中,但利用HTML5客户端存储仍存在与localStorage的例如? https://www.w3schools.com/html/html5_webstorage.asp – mickdev

+0

我不能重写应用程序我今晚只有几个小时的工作:)它必须准备好明天 –

+0

好的...那么基于用户存储所有数据呢?如果登录的用户进行了一些更改,您将拥有通用数据用户自由和个性化数据。这只是为了演示的目的,对吧?无论如何,祝你好运:) – mickdev

回答

1

快速和肮脏的方式,使您的整个应用程序只读。

的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 } 
0

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

  1. 使用虚拟数据库。从原始数据库复制它。让他们玩。当你不需要的时候丢弃它。
  2. 如果你无法访问数据库的创建和删除,你仍然可以做到这一点。只需在Doctrine实体的表名中添加临时前缀即可。无需重写整个应用程序,只需几行。运行迁移以创建新表。以后随时放弃它们。
  3. 使用虚拟机。在演出前制作快照。演出结束后,回滚到保存的快照。

这些或多或少都是简单的方法,它们与平台无关。

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

0

也许你可以使用Session来做到这一点,或者你可以在Symfony中实现的Memcache(一些例子可以在网上找到)。希望这会有所帮助。

相关问题