Laravel:使用自定义错误重定向但没有错误消息

时间:2017-11-21 04:00:51

标签: php laravel validation

考虑手动验证。如果在数据库中找不到订单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')))只是最后一个。我做错了什么?

3 个答案:

答案 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'))