如何自定义laravel中保存方法的异常

时间:2018-12-23 17:30:45

标签: laravel

我已经问过这个问题很多次了。我输了。拜托,请尽我所能,因为我已经挣扎了一段时间。

我们都知道laravel的save(),create(),delete()和其他方法。我想使用这些方法。我有一些问题。

1)如果我使用save()方法,我不想检查它是否返回true或false。因为您会同意我的观点,即如果到处都有其他陈述,那真是太糟糕了。所以我更喜欢做的是使用try catch,但是要使用try catch,save()方法必须抛出异常。但是,正如我发现的那样,它有时根本不会引发异常,而是返回false。所以我总是要检查它是否返回true或false?

2)我正在考虑上述问题。我想到的解决方案是,我可以创建一个基本模型类(我自己的),并且所有模型都将扩展该类,并且在该类中,我将覆盖存在于laravel的Model类中的那些方法。在该重写的方法中,如果它返回false,则将引发异常。这样,一切都很好,但仍然存在问题。我会解释原因。

我正在使用名为zizaco / entrust的Role-Permission软件包。真正发生的是角色,权限(在使用zizaco时)必须扩展其他一些类,这导致我遇到一个问题,即角色无法扩展我提到的基本模型类。 (因为类不能同时扩展两个类)。我也虽然做特征而不是基础模型类。但问题是zizaco / entrust也正在使用特质。在这个特征上,zizaco拥有那些雄辩的方法。一天结束时真正发生的事情是Role具有两个特征,并且这些特征都具有delete,save方法,这给我带来了冲突。

请我需要一些更好的方法。我要实现的目标如下。

我想在我的应用程序中使用save()delete()创建方法,并且我从不希望检查这些方法是否返回true或false。我希望他们无论如何都抛出异常。

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用saveOrFail方法?它将save方法调用包装在事务(see implementation here)中。

关于何时应使用例外或什么构成例外情况,也有古老的讨论。可以仅在情况下(例如网络问题)抛出异常。

您所描述的软件包是另一个古老的问题,即当组合比继承更有效时。除此之外,use设置时,您可能仍会拥有trait aliasing的特质和精打细算。对于您可能与之合作的其他开发人员来说是可读性的,还是将来易于调试的是另一回事。