防止Laravel雄辩模型上的某些积垢操作

防止Laravel雄辩模型上的某些积垢操作,laravel,laravel-4,eloquent,laravel-5,Laravel,Laravel 4,Eloquent,Laravel 5,有没有一种简单的方法可以防止某些CRUD操作在雄辩的模型上执行 我现在是怎么做的(根据记忆,我认为我缺少了一个与Eloquent的save()兼容的参数,但这并不重要): 雄辩允许您通过 侦听创建、更新、保存或删除事件 从事件回调返回false 例如,为了防止人们创建新的模型对象,如下所示 Foo::creating(function($foo) { return false; //no one gets to create something }); 在你的app/start/glo

有没有一种简单的方法可以防止某些CRUD操作在雄辩的模型上执行

我现在是怎么做的(根据记忆,我认为我缺少了一个与Eloquent的
save()
兼容的参数,但这并不重要):

雄辩允许您通过

  • 侦听
    创建、更新、保存或删除事件

  • 从事件回调返回false

  • 例如,为了防止人们创建新的模型对象,如下所示

    Foo::creating(function($foo)
    {
        return false; //no one gets to create something
    });
    

    在你的
    app/start/global.php
    文件中可以完成这项工作。

    除了@AlanStorm的答案,这里还有一个全面的信息:

  • 您可以为所有模型设置全局侦听器:

    Event::listen('eloquent.saving: *', function ($model) {
      return false;
    });
    
  • 或对于给定型号:

    Event::listen('eloquent.saving: User', function ($user) {
      return false;
    });
    // or
    User::saving(function ($user) {
      return false;
    });
    
    // If it's not global, but for single model, then I would place it in boot():
    // SomeModel
    public static function boot()
    {
       parent::boot();
    
       static::saving(function ($someModel) {
          return false;
       });
    }
    
  • 对于只读模型,您只需要一个
    保存
    事件侦听器返回false,然后所有:
    模型::创建
    $model->save()
    $model->update()
    将被拒绝

  • 以下是所有雄辩事件的列表:
    启动
    启动
    创建
    创建
    保存
    保存
    更新
    删除
    SoftDeletingTrait
    提供的
    deleted
    restored


  • 您可以设置filable字段,并在设置数据库时使其不可为null,这样做违反了许多好的原则。在Laravel 5上,您可以创建FormRequests
    Event::listen('eloquent.saving: User', function ($user) {
      return false;
    });
    // or
    User::saving(function ($user) {
      return false;
    });
    
    // If it's not global, but for single model, then I would place it in boot():
    // SomeModel
    public static function boot()
    {
       parent::boot();
    
       static::saving(function ($someModel) {
          return false;
       });
    }