考虑手动验证。如果在数据库中找不到订单ID ,我们会将用户重定向到包含输入字段且错误为'wrongOrderId'
的页面:
public function login(Request $request) {
$inputted_orderId = $request->input('order_id');
$orderIdInDB = DB::table(self::SITE_IN_DEVELOPMENT_TABLE_NAME)
->where(self::ORDER_ID_FIELD_NAME, $inputted_orderId)->first();
if (is_null($orderIdInDB)) {
return Redirect::route('loginToSitesInDevelopmentZonePage')->withErrors('wrongOrderId');
}
}
在此示例中,我们不需要传递错误消息:消息框已存在于View中;我们需要的是在用户被重定向并显示错误'wrongOrderId'
时显示此消息框:
@if (!empty($errors->first('wrongOrderId')))
<div class="signInForm-errorMessagebox" id="invalidID-errorMessage">
<!-- ... -->
</div>
@endif
以上所有代码都在没有laravel / php错误的情况下工作;当输入错误的订单号时,我进入is_null($orderIdInDB)
if-block,但是没有出现错误消息框。我尝试了很多方法,(!empty($errors->first('wrongOrderId')))
只是最后一个。我做错了什么?
答案 0 :(得分:1)
您是否尝试打印{{$errors->first()}}
?
first(string)
,作为键值对,它调用其第一个键VALUE
试试这个,
@if($errors->any())
<div class="signInForm-errorMessagebox" id="invalidID-errorMessage">
<!-- ... -->
</div>
@endif
答案 1 :(得分:0)
如果您想从验证程序错误中获取特定错误,请使用get()
方法。
$errors->get('wrongOrderId');
获取所有wrongOrderId
错误。
$errors->first('wrongOrderId');
获得wrongOrderId
错误的第一个错误
答案 2 :(得分:0)
我探究过$errors->first('wrongOrderId')
具有不可显示但非空值。所以@if ( $errors->first('wrongOrderId') !== null )
会有用。
比@if ($errors->first('wrongOrderId'))
更优雅的东西?不幸的是,只有一项检查是不够的:即使我们定义
return Redirect::route('loginToSitesInDevelopmentZonePage')->withErrors(['wrongOrderId' => true]);
php会将true
转换为1.因此,@if ( $errors->first('wrongOrderId') == true )
会起作用,但@if ($errors->first('wrongOrderId'))
不会。
但是,我们可以将$errors->first('wrongOrderId')
投射到bool
,因此最优雅的解决方案将是
@if ((bool) $errors->first('wrongOrderId'))