Laravel Collection#makeVisible()作为模型的方法

时间:2019-04-15 16:45:55

标签: php laravel eloquent

我有一个雄辩的口才模型,具有隐藏 payload字段

在某些地方,我想将该字段包含在JSON表示中。我用makeVisible方法做到这一点:

$models->makeVisible('payload');

但是我认为这不是很好的OOP代码(SRP,DIP,DRY规则等等)。我想通过在我的Model类中使用一些可重用的方法(例如 withPayload())将其隐藏在某种抽象的背后。在Laravel中有什么方法可以做到这一点?也许以某种方式与查询范围和采摘方法?

3 个答案:

答案 0 :(得分:2)

我认为您目前使用makeVisible的方式很好。将->makeVisible('payload');隐藏在另一种方法后面将不会有任何收获。这将是一种非标准的处理方式,下一位开发人员将不得不去学习并记住新方法的作用。

$hiddenmakeVisible使下一个开发人员清楚地知道该数据可能是敏感数据,并且不能对所有用户可见。如果您认为可以使数据可见而不是隐藏,那么可以考虑将字段添加到$visible数组中,或者同时删除$visible$hidden数组(如果您请勿将其用于其他任何字段),并在需要时使用makeHidden方法隐藏数据。

答案 1 :(得分:0)

我建议您深入fractalsspatie/laravel-fractal是一个很好的包装器),并在其中放置了将模型表示为JSON的逻辑。

您可以在其中定义JSON输出的基本结构(即您一直拥有的字段),并在需要特定字段的任何地方使用 include

答案 2 :(得分:0)

我认为您正在寻找的方法是:

Model::setVisible('field')

来自=> this