Laravel具有强大而优雅的验证功能,如unique/ignore/where。Backpack的CRUD控制器允许从控制器中调用Laravel验证。
我很清楚如何在Backpack控制器中调用required
这样的简单验证规则。
Rule::unique('users')
->ignore($user->id)
->where(function ($query) {
return $query->where('location_id', 1);
})
有没有一种方法可以在Backpack CRUD控制器中调用复杂的验证?或者在这种情况下,我 * 必须 * 在请求中定义验证,而不是CRUD控制器?
是否有文档定义了哪些特定的Laravel验证技术可以在Backpack控制器中使用,哪些不可以?
3条答案
按热度按时间abithluo1#
试试这个,让我知道它是否适合你。
将“用户名”更改为您的特定字段
参考:https://backpackforlaravel.com/docs/5.x/release-notes#quickly-validate-forms-inside-crudcontroller-no-formrequest-need
6ie5vjzr2#
谢谢你,@christmex。你绝对让我指明了正确的方向。
经过更多的研究和修改,我在CRUD控制器中为Groups表做了以下工作:
这很好用--
name_group
是必需的,而且它必须是唯一的,上面的代码使Backpack有相应的行为。所以看起来我最初问题的答案是否定的,在Backpack控制器中没有验证限制。如果你可以使用Laravel的
Rule::
facade来表达它,你可以在Backpack控制器中设置它。然而,我将继续研究这个模式,因为我不太清楚这个模式是否会与其他字段的其他验证正确地交互。你可能确实可以在Backpack控制器中设置任何验证,但可能需要遵循一些特定的编码规则。
我们会看到...我会回来报告。
vsnjm48y3#
经过进一步的测试,我确定确实还有一些规则需要遵循。但首先,这里有一个更广泛的模式,它工作得很好:
因此,规则似乎是:
1.您可以在控制器中逐个字段地使用
setValidation()
,对setValidation()
的每次调用似乎都是相对于先前调用的累积,因此当您第二次调用setValidation()
时不会丢失任何内容。1.在同一个控制器中,需要简单验证的字段可以使用
->validationRules()
* 而不是 *setValidation()
。换句话说,您可以在给定控制器中逐个字段地自由混合和匹配。1.你***不能***做的是对单个字段使用 both 验证技术!我的测试表明,
setValidation()
会“清除”最近CRUD::field()
语句中的任何validationRules()
。因此,只要你不在单个字段中混合匹配验证技术 *,就应该没问题。如果有人谁是Maven在内部的背包可以评论是否一切我写的是正确的和完整的,或不,这将是非常有帮助的所有背包用户,我敢肯定。谢谢!