【发布时间】:2020-12-26 14:49:33
【问题描述】:
我在控制器内的 POST 请求方法上有这个验证规则:
class CreateOrderController extends Controller
{
public function create(Request $request)
{
$this->validate($request, [
'store_id' => $request->order_type === OrdersTypeConstants::P2P ? "" : "required|" . 'exists:stores,id',
'p2p_type' => [Rule::in([OrdersTypeConstants::P2PCOURIER, OrdersTypeConstants::P2PPURCHASE])],
'items' => 'required_if:p2p_type,'.OrdersTypeConstants::P2PPURCHASE.'|array',
'items.*.id' => 'nullable|numeric',
'items.*.quantity' => 'nullable|integer|min:1',
'items.*.adjustment' => 'nullable|numeric',
'items.*.image' => 'nullable|string',
'items.*.addons' => 'array',
'items.*.reward_applied' => 'boolean',
'items.*.replacement_strategy.type' => [
'string',
Rule::in([ItemReplacementStrategyConstants::REMOVE,ItemReplacementStrategyConstants::BEST_MATCH, ItemReplacementStrategyConstants::SPECIFIC])
],
'items.*.replacement_strategy.quantity' => 'integer|min:1',
'items.*.replacement_strategy.item_id' => 'numeric',
'address_id' => 'exists:addresses,id,user_id,' . $client_id,
'address_id_p1' => 'exists:addresses,id,user_id,' . $client_id,
'use_cash_deposit' => 'boolean',
]);
有时它会返回The store id field is required,即使它实际上是发送,您可以在错误日志中看到:
仅在生产环境中随机发生 - 并非始终如一地发生,仅在 firebase 上报告。
为什么会这样?
【问题讨论】:
-
你的 validate() 里面有什么?我没有看到你使用 Request::validate() 或 Validator::make()
-
@AlzafanChristian 控制器有一个
validate方法,您应用程序中的基本控制器使用ValidatesRequest特征 -
@lagbox 是的,抱歉,完全忘记了 app/Http/Controllers/Controller 中的控制器有 ValidatesRequests,我并不总是扩展那个控制器
-
如果您在验证器之前记录 $request->all() ,那里是否存在值?我不明白为什么不会,但只是为了确定。
-
这可能是包含在原始帖子中的有用信息。
标签: laravel validation request race-condition laravel-5.8