【问题标题】:Displaying the Error Messages in Laravel after being Redirected from controller从控制器重定向后在 Laravel 中显示错误消息
【发布时间】:2014-12-31 04:56:35
【问题描述】:

如何在 Laravel 中重定向的视图中显示验证消息?

这是我在控制器中的功能

public function registeruser()
{
    $firstname = Input::get('firstname');
    $lastname = Input::get('lastname');
    $data  =  Input::except(array('_token')) ;
    $rule  =  array(
                'firstname'       => 'required',
                'lastname'         => 'required',
                   ) ;
    $validator = Validator::make($data,$rule);
    if ($validator->fails())
    {
    $messages = $validator->messages();
    return Redirect::to('/')->with('message', 'Register Failed');
    }
    else
    {
    DB::insert('insert into user (firstname, lastname) values (?, ?)',
                                array($firstname, $lastname));
    return Redirect::to('/')->with('message', 'Register Success');
    }
    }

我知道下面给出的代码是一个不好的尝试,但我该如何解决它,什么是 我错过了

@if($errors->has())
    @foreach ($errors->all() as $error)
        <div>{{ $error }}</div>
    @endforeach
@endif

更新:以及如何在特定字段附近显示错误消息

【问题讨论】:

  • 你必须返回错误信息,比如return Redirect::to('/')-&gt;withErrors($validator);
  • 谢谢,它帮助了我
  • @SA__ 在验证重定向后,您如何在每个字段中保存键入的值?

标签: php laravel laravel-4 blade


【解决方案1】:

你可以像下面这样使用html标签打印:

@if($errors->any())
    {!! implode('', $errors->all('<div>:message</div>')) !!}
@endif

【讨论】:

    【解决方案2】:

    如果你也在使用 Laravel 8 和 Bootstrap 5,你可以像这样使用警报整齐地显示错误:

    @if($errors->any())
        <div class="alert alert-danger alert-dismissible">
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
            <strong>
                {!! implode('<br/>', $errors->all('<span>:message</span>')) !!}
            </strong>
        </div>
    @endif
    

    【讨论】:

      【解决方案3】:

      如果使用toastr,请使用以下以浮动消息显示错误

      @if($errors->any()) 
           <script type="text/javascript">
               toastr.error({{ implode(' ', $errors->all()) }});
          </script> 
      @endif
      

      【讨论】:

        【解决方案4】:

        在输入字段下方我包含附加视图:

        @include('input-errors', ['inputName' => 'inputName']) #For your case it would be 'email'
        

        输入错误.blade.php

        @foreach ($errors->get($inputName) as $message)
            <span class="input-error">{{ $message }}</span>
        @endforeach
        

        CSS - 为消息添加红色。

        .input-error {
            color: #ff5555;
        }
        

        【讨论】:

          【解决方案5】:

          这也是完成任务的好方法。

          @if($errors->any())
            {!! implode('', $errors->all('<div class="alert alert-danger">:message</div>')) !!}
          @endif
          

          我们可以根据需要格式化标签。

          【讨论】:

            【解决方案6】:
            $validator = Validator::make($request->all(), [ 'email' => 'required|email', 'password' => 'required', ]);
            
            if ($validator->fails()) { return $validator->errors(); }
            

            【讨论】:

            • 您的帮助太好了,您能否为经验不足的伙伴解释一下您的代码为何以及如何解决问题。为了使帖子更简洁易读,请使用适当的格式 stackoverflow 建议:stackoverflow.com/editing-help
            【解决方案7】:

            Laravel 4

            当验证失败时返回验证错误。

            if($validator->fails()) {
                return Redirect::back()->withErrors($validator);
            }
            

            您可以使用

            在您的视图中捕获错误
            @if($errors->any())
                {{ implode('', $errors->all('<div>:message</div>')) }}
            @endif
            

            更新

            要在每个字段下显示错误,您可以这样做。

            <input type="text" name="firstname">
            @if($errors->has('firstname'))
                <div class="error">{{ $errors->first('firstname') }}</div>
            @endif
            

            使用 css 获得更好的显示样式。

            您可以参考文档here.

            更新 2

            一次显示所有错误

            @if($errors->any())
                {!! implode('', $errors->all('<div>:message</div>')) !!}
            @endif
            

            在每个字段下显示错误。

            @error('firstname')
                <div class="error">{{ $message }}</div>
            @enderror
            

            【讨论】:

            • 验证后如何保存输入的值?
            • &lt;input type="text" name="firstname" value="{{ old('firstname') }}"&gt; 或使用表单助手,验证错误后会自动保存值。
            • 请注意,$errors-&gt;first('firstname') 只会显示给定字段的第一条消息。您可能有多个错误;将它们作为一个数组进行循环,如下所示:$errors-&gt;get('firstname')
            • 对于使用引导程序的人,这是您的代码 sn-p:@if($errors->any()) {!! implode('', $errors->all('')) !!} @endif
            【解决方案8】:

            为了让它看起来不错,你可以使用很少的引导帮助

            @if(count($errors) > 0 )
            <div class="alert alert-danger alert-dismissible fade show" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <ul class="p-0 m-0" style="list-style: none;">
                    @foreach($errors->all() as $error)
                    <li>{{$error}}</li>
                    @endforeach
                </ul>
            </div>
            @endif
            

            【讨论】:

              【解决方案9】:

              Laravel 5.8.13

              新增了 Laravel Blade 错误指令
              // Before
              @if ($errors->has('email'))
                  <span>{{ $errors->first('email') }}</span>
              @endif
              
              // After:
              @error('email')
                  <span>{{ $message }}</span>
              @enderror
              

              【讨论】:

                【解决方案10】:
                {!! Form::text('firstname', null !!}
                
                @if($errors->has('firstname')) 
                    {{ $errors->first('firstname') }} 
                @endif
                

                【讨论】:

                • 我认为你应该解释为什么你建议这个解决方案。它什么也没说。
                【解决方案11】:

                如果你想从你所在的控制器加载视图:

                if ($validator->fails()) {
                    return self::index($request)->withErrors($validator->errors());
                }
                

                如果您想快速显示所有错误但有更多控制权:

                 @if ($errors->any())
                     @foreach ($errors->all() as $error)
                         <div>{{$error}}</div>
                     @endforeach
                 @endif
                

                【讨论】:

                  【解决方案12】:

                  如果上述方法对您不起作用,请将所有内容移至 kernel.php 请记住,除了上述解决方案之外,您还必须移动 kernel.php 中的所有这些行

                  让我先显示它在文件中的样子..

                  protected $middleware = [
                  
                      \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
                  ];
                  
                  /**
                   * The application's route middleware groups.
                   *
                   * @var array
                   */
                  protected $middlewareGroups = [
                      'web' => [
                          \App\Http\Middleware\EncryptCookies::class,
                          \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                          \Illuminate\Session\Middleware\StartSession::class,
                          \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                          \App\Http\Middleware\VerifyCsrfToken::class,
                      ],
                  
                      'api' => [
                          'throttle:60,1',
                      ],
                  ];
                  

                  现在你要做的是

                  protected $middleware = [
                      \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
                       \App\Http\Middleware\EncryptCookies::class,
                          \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                          \Illuminate\Session\Middleware\StartSession::class,
                          \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                          \App\Http\Middleware\VerifyCsrfToken::class,
                  ];
                  
                  /**
                   * The application's route middleware groups.
                   *
                   * @var array
                   */
                  protected $middlewareGroups = [
                      'web' => [
                  
                      ],
                  
                      'api' => [
                          'throttle:60,1',
                      ],
                  ];
                  

                  即;

                  【讨论】:

                  • 这样做会使所有这些中间件对您当前的所有路由都处于活动状态,而只需将“web”中间件组添加到您的路由中。像这样 Route::get('/home', 'controller@home')->middleware('web');或将其添加到控制器的 __construct 方法中,如下所示: $this->middleware('web');如果你运行的是最新版本的 laravel,'web' 中间件组会被 RouteServiceProvider 自动应用到你的 routes/web.php 文件中。
                  【解决方案13】:
                  @if ($errors->has('category'))
                      <span class="error">{{ $errors->first('category') }}</span>
                  @endif
                  

                  【讨论】:

                  • 请提供一些细节。
                  • 请在您的回答中提供更多详细信息以总结您的代码的作用。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-10-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-10-09
                  相关资源
                  最近更新 更多