如何保护 Laravel 模型属性

2024-01-01

当使用其他框架或纯 PHP 时,我会保护我的模型属性。然后,我根据需要创建公共 getter 和 setter,并使用它们代理__get() and __set()。这有助于我晚上睡觉。

最近我开始使用 Laravel,我对 Eloquent 模型的“不受保护”程度感到惊讶。我明白我可以使用$guarded and $fillable属性来控制质量分配,但这仍然为意外访问留下了很大的空间。

例如,我的模型有一个status财产。它在模型创建时设置了默认值,并且仅应在以下情况下修改:$model->activate() or $model->deactivate()叫做。但默认情况下,Laravel 允许开发者直接修改它。据我所知,防止这种情况的唯一方法是创建一个 setter,并在调用它时抛出异常。

我错过了什么吗?也许我只是需要放松一下?构建默认安全的 Eloquent 模型的最佳方法是什么?


您可以重写 __get 和 __set 方法。您需要定义一个数组 protectedProperties 和一个布尔变量 protectedChecks,以便您可以控制模型字段。

protected $protectedChecks = true;

protected $protectedProperties = [ 'status' ];

protected $fillable = ['status'];

public function __get($key)
{
    return (in_array($key, $this->fillable) && !in_array($key, $this->protectedProperties)) ? $this->attributes[$key] : null;
}

public function __set($key, $value)
{
    if(!$this->protectedChecks || !in_array($key, $this->protectedProperties))
            return parent::__set($key, $value);
        trigger_error('Protected Field');
}

public function activate()
{
    $this->protectedChecks = false;
    $this->status = 1;
    $this->save(); // this is optional if you want to save the model immediately
    $this->protectedChecks = true;
}

如果你想使用每个模型,你应该在 BaseModel 中编写类似上面的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保护 Laravel 模型属性 的相关文章

  • 在 Laravel 中使用块或游标优化代码

    我有Company型号和Contact我的模型中定义的Laravel 5 4应用程序中 两者具有多对多的关系 因此 例如联系人模型具有 public function company return this gt belongsToMany
  • 多种邮件配置

    我使用 mandrill 驱动程序配置了 laravel 的邮件服务 这里没有问题 现在 在我申请的某个时刻 我需要通过 gmail 发送邮件 我做了类似的事情 backup current mail configs backup Conf
  • Laravel 资源策略始终为 false

    我试图允许用户在 Laravel 5 4 中查看自己的个人资料 用户策略 php public function view User authUser user return true 在 AuthServiceProvider php 中
  • 如何使用 Laravel Mix 和 WorkBox?

    我正在尝试为我的应用程序构建一个 PWA 并花了近 48 小时试图弄清楚如何将 Workbox 与 Laravel Mix 结合使用 具有讽刺意味的是 谷歌说 Workbox 是为了让事情变得简单 Buh 好吧 到目前为止我已经弄清楚了 我
  • Laravel:类控制器不存在

    我创建了一个简单的控制器并定义了一个函数 但是当我运行它时 它返回一个错误 指出控制器不存在 在我的 web php 中分配一条路线
  • 使用 Mock 对 Laravel 5 Mail 进行单元测试

    有没有办法在 Laravel 5 中测试 Mail 尝试了我在互联网上看到的唯一合法的模拟示例 但它似乎只适用于 Laravel 4 下面的当前代码 mock Mockery mock Swift Mailer this gt app ma
  • laravel 5.3 新的 Auth::routes()

    最近开始使用laravel 5 3写博客 但是运行后出现一个问题php artisan make auth 当我运行这个时 它会在我的web php 这是其中的代码 Auth routes Route get home HomeContro
  • Laravel 意外错误“类用户包含 3 个抽象方法...”

    在 Laravel 上编写我的身份验证应用程序时 我遇到了一个以前从未见过的错误 我已经集思广益了近一个小时来解决这个问题的原因 但仍然找不到解决方案 Error User 类包含 3 个抽象方法 因此必须声明为抽象方法或实现其余方法 Il
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • Laravel Vue js spa 应用程序

    1 我想知道为什么人们使用两台服务器用 laravel 制作 vuejs SPA 我想我们可以用另一种方式 制定这样的路线 Route get any function return view index gt where any 并让 v
  • cURL 错误 77:设置证书验证位置时出错:CAfile

    我正在使用 Firebase php SDKlink https firebase php readthedocs io en latest index html并在 Windows 10 上的 XAMPP 服务器上使用 laravel 最
  • Laravel 路由中的“as”关键字是什么意思?

    据我从 Laravel 文档中了解到 它用于重定向 但也许我错了 I wrote Route get user profile as gt profile function echo some text 然后我期望我的 URL 重定向自ht
  • Laravel 按动态 ID 数组对集合进行排序 [重复]

    这个问题在这里已经有答案了 我有以下 people array 5 2 9 6 11 people collection People find people 但当我倾倒并死去时 people collection集合按 ID ASC 排序
  • 在 Laravel 中动态设置数据库连接和语言

    我有 3 个域指向同一个Laravel应用 我想要的是每个人都连接到自己的数据库并根据 TLD 加载自己的语言文件 我可以在哪个文件中设置这些设置 我可以直接在配置文件中执行此操作 或者可以在加载配置之前执行某些事件 我拥有的是一个简短的函
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • Laravel/00webhost 错误 404。在此服务器上找不到请求的 URL

    1 将我的文件上传到 000webhost 我将公用文件夹中的所有文件放置到公共 html然后我创建了一个名为laravel我在那里上传了所有其他文件 这是我的目录结构 laravel app 引导程序 config 公共 html 索引
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • 此集合实例上不存在属性 [子类别]

    第一次与eloquent关系 我正在尝试访问subcategory method但我收到这个错误 此集合实例上不存在属性 子类别 Laravel 新手 因此任何帮助将不胜感激 blade table class table thead tr
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之

随机推荐

  • 模拟器中的推送通知 - Xcode 11.4beta 不工作

    最近苹果也在模拟器中添加了推送通知 模拟器中未收到我现有的应用程序通知 如何在模拟器中模拟推送通知 模拟器支持模拟远程推送通知 包括后台内容获取通知 参考 https developer apple com documentation xc
  • 使用 CSS 设计 XML 样式时,如何引用包含句点或冒号的标签名称?

    我正在设计一个包含以下标签的 XML 文档
  • 使用 Python 通过 Selenium 设置 chromedriver 代理身份验证

    我正在使用 Python 和 Selenium 库编写一个测试套件 使用 chromedriver 我使用以下方式设置代理 chrome options webdriver ChromeOptions chrome options add
  • Azure 资源标识符格式 URI -URL 或 URN

    我正在使用 Azure 我注意到它为每个资源组和资源创建了一个如下所示的 ID 对于资源组 subscriptions
  • R download.file 使用“wget”方法并指定额外的 wget 选项

    我有一个关于使用的可能相当基本的问题download fileR 中的函数使用wget选项并使用一些 wget 额外选项 但我就是无法让它工作 我想做的 下载一个网页的本地副本 实际上是几个网页 但目前的挑战是让它即使只有 1 个也能工作
  • 导轨联系表不起作用

    我正在尝试创建一个提交表单的联系人 但我没有收到任何电子邮件 在我的 config application rb 中我添加了 config action mailer raise delivery errors true config ac
  • AngularJS 向路由添加授权

    如何向 AngularJS 和 ui router 添加授权 我正在使用 modulg ng oauthhttps github com andreareginato oauth ng https github com andrearegi
  • Linq 查询具有分组依据

    RowNum IMAGEID SCANEDATE COUNT 1 10000131 2012 07 04 00 00 00 000 1 2 10002626 2012 08 03 00 00 00 000 1 3 10003348 2012
  • React:ref 不是 prop

    使用 React js 时 为什么我得到 ref is not a prop key is not a prop error Notes 但是我在使用 webpack dev server 运行时没有遇到此错误 我没有ref or key在
  • 使用字符串作为函数参数

    我确信这很简单 但我找不到解决方案 我想使用包含字符串的变量作为函数的参数 x lt c 1 10 myoptions lt trim 0 na rm FALSE 现在 像 foo lt mean x myoptions 应该是一样的 fo
  • git 撤消受保护分支上的提交?

    有没有办法撤消受保护分支上的提交 我的意思是 如果您推送了错误的提交 在非受保护的分支上 您可以将 HEAD 重置为最后一个所需的提交 或者恢复错误的提交并强制推送 从而撤消它 但受保护的分支不允许强制推送 对于这种情况 有什么方法可以解决
  • 如何确定寄存器是否从右到左加载,反之亦然

    在查看 gdb 输出并查看汇编调用时 通常我可以找到一个使用硬编码值的命令来确定寄存器是否从右到左加载 反之亦然 通常类似于以下内容 sub rsp 16 or sub 16 rsp 但其他时候 没有像上面这样的值可见 我所看到的都是类似以
  • Symfony 2 支持部分表单绑定吗?

    我的问题 Symfony 2 支持吗PATCH请求 或任何类型的partial表单内容提交 如果是这样 是否有 正确 或更准确地说 首选 方法来做到这一点 除了PRE BIND 见下文 事件方法 还有其他模式或方法来解决这个问题吗 如果有其
  • Haskell 函数返回存在类型

    是否可以编写一个 Haskell 函数来生成隐藏了确切类型参数的参数化类型 IE 就像是f T gt exists a U a 明显的尝试 LANGUAGE ExistentialQuantification data D a D a da
  • 在 Windows Phone 8 中保存 LongListSelector 控件的滚动位置

    我需要保存 LongListSelector 位置 以便在返回页面后恢复它 首先 我将 GetItemsInView 与 WP7 一起使用 效果很好 然后用 WP8 它就消失了 我必须使用已实现项目 http msdn microsoft
  • 有没有办法告诉 Dropbox 不要上传某个文件? (日食相关)

    我正在尝试在两台计算机之间同步代码项目 一台运行 Windows 另一台运行 Ubuntu 12 04 我在两台机器上都使用 Eclipse 但是 元数据由于操作系统不兼容 Eclipse 生成的文件夹导致 Eclipse 崩溃 我想知道是
  • 说非确定性图灵机可以在多项式时间内解决 NP 问题会产生什么后果?

    这些天我一直在研究NP问题 计算复杂性和理论 我相信我终于掌握了图灵机的概念 但我有一些疑问 我可以接受 非确定性图灵机对于给定状态和正在读取的符号有几种选择 并且它总是会选择最佳选项 如维基百科所述 NTM 如何 知道 其中哪一个 应该采
  • 以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低分辨率预览

    我正在使用 DirectShow Net 将网络摄像头流式传输到我的 C 4 0 应用程序以读取 QR 码 它每 0 5 秒拍摄一次快照 看看是否可以找到任何 QR 码并对其进行解码 这在我的开发计算机上在我可以使用网络摄像头的任何分辨率下
  • 实现一键登录以与后端交互

    我正在实施一键登录 如所描述的here https developers google com identity one tap android idtoken auth一切基本上都很好 我可以获得一个令牌 在后端验证它等等 但我有一个问题
  • 如何保护 Laravel 模型属性

    当使用其他框架或纯 PHP 时 我会保护我的模型属性 然后 我根据需要创建公共 getter 和 setter 并使用它们代理 get and set 这有助于我晚上睡觉 最近我开始使用 Laravel 我对 Eloquent 模型的 不受