【问题标题】:Laravel: redirect with custom error but without error messageLaravel:重定向自定义错误但没有错误消息
【发布时间】:2018-05-04 10:28:49
【问题描述】:

考虑手动身份验证。如果在数据库中没有找到订单 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-&gt;first('wrongOrderId'))) 只是最后一种。我做错了什么?

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    您是否尝试打印{{$errors-&gt;first()}}

    first(string),作为键值对工作,它调用它的第一个键 VALUE

    试试这个,

     @if($errors->any())
        <div class="signInForm-errorMessagebox" id="invalidID-errorMessage">
            <!-- ... -->
        </div>
     @endif
    

    【讨论】:

    • 感谢您的回答!我成功打印了$errors-&gt;first()。 `@if($errors->any())` 也有效。具体如何查看错误,我在user2486的回答中了解到。
    【解决方案2】:

    如果您想从验证器错误中获取特定错误,请使用get() 方法。

    $errors-&gt;get('wrongOrderId'); 获取所有wrongOrderId 错误。

    $errors-&gt;first('wrongOrderId'); 得到wrongOrderId 错误的第一个错误

    【讨论】:

    • 感谢您的回答。嗯...当我尝试$errors-&gt;first('wrongOrderId'); 时,错误还没有出现。 -&gt;withErrors('wrongOrderId'); 你的解决方案可以吗?另外,当我尝试$errors-&gt;get('wrongOrderId'); 时,我得到了一个奇怪的异常:htmlspecialchars() expects parameter 1 to be string, array given{{$errors-&gt;first()}} 正在工作:wrongOrderId 正在显示。
    • 在刀片 php 中使用此代码,而不是控制器。添加{{ }}{!! !!}
    【解决方案3】:

    我探索了$errors-&gt;first('wrongOrderId') 具有不可显示但非空值。所以@if ( $errors-&gt;first('wrongOrderId') !== null ) 会起作用。

    @if ($errors-&gt;first('wrongOrderId')) 这样更优雅的东西?不幸的是,只有一个这样的检查是不够的:即使我们定义了

    return Redirect::route('loginToSitesInDevelopmentZonePage')->withErrors(['wrongOrderId' => true]);
    

    php 会将 true 转换为 1。因此,@if ( $errors-&gt;first('wrongOrderId') == true ) 可以工作,但 @if ($errors-&gt;first('wrongOrderId')) 不会。

    但是,我们可以将$errors-&gt;first('wrongOrderId') 转换为bool,因此最优雅的解决方案将是

    @if ((bool) $errors-&gt;first('wrongOrderId'))

    【讨论】:

      猜你喜欢
      • 2019-12-14
      • 2018-08-12
      • 2020-12-05
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多