Php 如何使用“创建Laravel 4应用程序”;只读;数据库模式

Php 如何使用“创建Laravel 4应用程序”;只读;数据库模式,php,laravel,event-handling,Php,Laravel,Event Handling,我想使我的Laravel 4应用程序具有只读模式。因此,对数据库的任何更新/写入都将被忽略 正确的方法是倾听雄辩的*事件并返回false吗 监听事件并返回false是行不通的——Laravel的事件只是通知,它们本身并不控制操作。i、 你在听一声喊叫,但你无法阻止喊叫的发生。从事件返回false只会停止在侦听器之后触发的其他侦听器 Re:“只读”模式,很大程度上取决于应用程序如何写入数据库,但我会先重写DBfacade来重写您自己的对象(扩展原始数据库对象),然后重新定义任何插入/更新等方法,如

我想使我的Laravel 4应用程序具有只读模式。因此,对数据库的任何更新/写入都将被忽略


正确的方法是倾听雄辩的*事件并返回false吗

监听事件并返回false是行不通的——Laravel的事件只是通知,它们本身并不控制操作。i、 你在听一声喊叫,但你无法阻止喊叫的发生。从事件返回false只会停止在侦听器之后触发的其他侦听器

Re:“只读”模式,很大程度上取决于应用程序如何写入数据库,但我会先重写
DB
facade来重写您自己的对象(扩展原始数据库对象),然后重新定义任何插入/更新等方法,如果站点处于只读模式,则不执行任何操作。您需要确保这些方法仍然返回正常情况下的结果(数组、空数据库资源等)

更新值得注意的是,某些组件(如Eloquent)将使用事件中的
返回false来表示某些事件不应发生

#File: vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
public function save(array $options = array())
{
    $query = $this->newQueryWithoutScopes();

    // If the "saving" event returns false we'll bail out of the save and return
    // false, indicating that the save failed. This gives an opportunities to
    // listeners to cancel save operations if validations fail or whatever.
    if ($this->fireModelEvent('saving') === false)
    {
        return false;
    }

    //... rest of save code here

激发事件的是
fireModelEvent
方法——如果返回false,则Eloquent将不执行保存。这就是我所说的“很多”的意思,这取决于应用程序写入数据库的方式——上面描述的事件行为是Eloquent开发人员做出的选择——不是所有事件都会以这种方式进行,也不是所有从数据库添加/删除数据的操作都会触发事件。

我尝试了event::listen('Eloquent.*',function($model){…});不过,只要返回false,就不会再写了。所以它似乎起作用了。@jimbo2087更新了我的答案以澄清(另外--我不知道雄辩者这么做了,谢谢!)