首页 > 其他分享 >Model中的unguard()

Model中的unguard()

时间:2024-05-23 11:30:01浏览次数:14  
标签:调用 服务 unguard boot 服务提供者 Model

在 Laravel 中,Model::unguard(); 通常会在需要临时禁用所有模型的批量赋值保护的场合下使用。最典型的场合是在数据库的种子填充(seeding)过程中。

你可以在以下两个地方使用 Model::unguard();

  1. 数据库种子类(Database Seeders):在数据库种子类中调用 Model::unguard(); 可以让你在填充数据库时不受 $fillable$guarded 属性的限制。通常,这会在 run 方法的开始调用,并在方法结束时通过 Model::reguard(); 恢复保护。

    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    
    class DatabaseSeeder extends Seeder
    {
        public function run()
        {
            Model::unguard();
    
            // 调用其他种子类
            $this->call(UserTableSeeder::class);
    
            Model::reguard();
        }
    }
    
  2. 服务提供者(Service Providers):如果你想要在整个应用程序的生命周期中禁用批量赋值保护,可以在 AppServiceProvider 或你创建的任何其他服务提供者的 boot 方法中调用 Model::unguard();

    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Support\ServiceProvider;
    
    class AppServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            Model::unguard();
        }
    
        public function register()
        {
            //
        }
    }
    

请注意,全局禁用批量赋值保护可能会引入安全风险,因为它允许所有属性在批量赋值时不受限制。因此,这通常只在控制严格的环境下(如本地开发环境或数据库种子填充时)使用,并且在操作结束后应该使用 Model::reguard(); 来重新启用批量赋值保护。在生产环境中,应该避免使用 Model::unguard();,除非你完全了解潜在的安全风险并有相应的安全措施。

** AppServerProvider **
AppServiceProvider 是 Laravel 框架中的一个核心组件,它是所有服务提供者的基类。服务提供者主要用于配置和注册服务。在 Laravel 中,服务是用来提供某种功能的类,例如数据库服务、队列服务、邮件服务等。服务提供者用于把这些服务绑定到 Laravel 的服务容器中,使得这些服务可以在整个应用中被方便地使用。

AppServiceProvider 中的 bootregister 方法都是用于配置和注册服务的,但它们的用途和调用时机有所不同。

  1. register 方法:此方法在所有服务提供者被注册时调用。也就是说,当 Laravel 启动并开始收集所有服务提供者时,它会调用每个服务提供者的 register 方法。你应该只在 register 方法中绑定服务到服务容器,不要在这里尝试访问已经注册的服务,因为这个时候这些服务可能还没有被加载和配置好。

  2. boot 方法:此方法在所有服务提供者被注册之后调用。换句话说,当所有服务提供者都注册完毕,并且所有服务都已经被绑定和配置好,Laravel 就会调用每个服务提供者的 boot 方法。在 boot 方法中,你可以访问已经注册的服务,进行各种启动后的配置,例如设置视图共享数据,注册视图合成器,或者发布资源文件等。

标签:调用,服务,unguard,boot,服务提供者,Model
From: https://www.cnblogs.com/laraveler/p/18208053

相关文章

  • 题目:SHMIP The subglacial hydrology model intercomparison Project
    SHMIP(冰下水文模型比较计划)是一个致力于解决冰下水文多种理论方法问题的项目。该计划通过构建一系列综合模拟实验,并对运行这些模拟的各参与模型的结果进行比较,以达到其目标。这将有助于潜在的模型用户更加明智地为特定应用选择合适的模型。同时,对于模型开发人员来说,这将有助于他们......
  • DashVector + ModelScope 玩转多模态检索
    本教程演示如何使用向量检索服务(DashVector),结合ModelScope上的中文CLIP多模态检索模型,构建实时的“文本搜图片”的多模态检索能力。作为示例,我们采用多模态牧歌数据集作为图片语料库,用户通过输入文本来跨模态检索最相似的图片。整体流程主要分为两个阶段:图片数据Embedding入库......
  • SpringBoot给所有的 Model添加属性
    添加全局数据@ControllerAdvice是一个全局数据处理组件,因此也可以在@ControllerAdvice中配置全局数据,使用@ModelAttribute注解进行配置,代码如下: 运行测试结果:  ......
  • QStandardItemModel遍历查找搜索关键字
    (1)findItems查找内容筛选项,只能查找显示的文字中是否包含该文字,但是QList<QStandardItem*>findItems(constQString&text,Qt::MatchFlagsflags=Qt::MatchExactly,intcolumn=0)const;(2)mat......
  • QStandardItemModel 遍历勾选的项
    QStandardItemModel遍历勾选的项rowCount()不能传入 m_model->index(0,0)根节点,无法获取行数;不传,或者传入一个空QModelIndex对象,可以获取到第一级节点的数量;QMap<QString,QVariantMap>mapSelectVideo;introotRowCount=m_model->rowCount();for(inti=0;i<ro......
  • modelsim安装与vivado联仿
    从网上下载安装包网上资源很多,需要注意要下载与vivado版本相匹配的modelsim版本。查看对应关系可以看网址下载完包后将crack.bat、MentorKG.exe拷贝到modelsim安装目录的win64文件夹下,例如D:\modelsim\win64pe双击crack.bat,看是否报错。若报错找不到mgls.dll,将mgls64.dll重命......
  • Laravel中的Model
    在Laravel中,模型(Model)中的一些常用方法包括fillable、guarded、timestamps、primaryKey等,它们用于定义模型的属性、保护属性、自动维护时间戳和主键等。下面我逐个介绍这些方法:fillable:fillable属性用于定义可以批量赋值的属性(字段),也就是允许用户通过模型的create或fi......
  • 【django学习-21】ModelForm方式,自定义数据校验
    前言:我们在使用ModelForm新增数据时,除了使用默认的数据校验之外,还可以自定义数据校验例如:有个靓号的列表,新增/编辑校验1.代码示例1.1:modles.pyclassPrettyNum(models.Model):"""靓号表"""mobile=models.CharField(verbose_name="手机号",max_length=11)......
  • 【django学习-20】新增用户(ModelForm方式)
    1.什么是ModelForm?ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单、方便得对数据库进行增加、编辑操作和验证标签的生成;比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应......
  • Laravel Model中的$appends
    protected$appends是Laravel模型中的一个属性,用于指定哪些虚拟属性(Accessor)应该被包含在模型的数组或JSON表示中。虚拟属性是在模型中定义的,通过使用Accessors和Mutators来访问和修改模型属性的值。这些虚拟属性不会存储在数据库中,但可以通过模型实例进行访问和操作......