【问题标题】:Laravel 5 Missing route doesn't throw ExceptionLaravel 5 Missing route 不会抛出异常
【发布时间】:2016-04-19 22:44:57
【问题描述】:

我的丢失路线行为有问题。如果我尝试随机 URL,则不会引发异常,我会得到一个

未定义变量:错误

而不是我创建的 404 页面。问题是,如果我尝试从有效的现有路由访问数据库中不存在的对象,则会引发 404 错误,并且页面会按应有的方式呈现。

我的错误页面有一个布局,其中包括一个顶栏,并且在该栏中有一个我包含在主布局中的模态表单(未定义的错误显然来自该模态):

ma​​stererror.blade.php:

<!DOCTYPE html>
 <html>
 <head>
    <title>@yield('title')</title>
    <!-- Load CSS -->
    @include('assets.css')
    <!--------------> 
    <!-- Load jQuery -->
    <script src="{{ URL::asset('js/jquery-2.1.4.min.js')}}"></script>
    <!----------------->

 </head>
 <body>

 <!-- Load Navbar -->
 @include('elements.html.navbartop')
 <!----------------->
 <div class="pusher">

    <div id="content" class="ui main container" style="margin: 70px 0px 50px  0px">
        <!-- Load Content -->
        @yield('content')
        <!------------------>
    </div>
 </div>
 <!-- Load Footer -->
 @include('elements.html.footer')
 <!----------------->
 <!-- Load JavaScript -->
 @include('assets.js')
 <!--------------------->

 <!-- Load login Modal -->
 @include('elements.html.partials.login-modal')
 <!---------------------->

 </body>
 </html>

404.blade.php:

@extends('layout.mastererror')

@section('title', 'Not Found.')

@section('content')

<div style="margin-top: 30px">
    <img class="ui medium image centered" src="{{asset('images/notfound.png')}}">
    <h1 class="ui header centered">404 Not Found.</h1>
    @if($exception->getMessage() !== '')
        <h2 class="ui header centered">{{ $exception->getMessage() }}.</h2>
    @else
        <h2 class="ui header centered">The resource is missing.</h2>
    @endif
    <h3 class="ui header centered"><a href="{{ route('index') }}">Home</a>   </h3>
</div>

@endsection

登录-modal.blade.php:

<div class="ui small modal" id="loginModal">
    <i class="circular close icon inverted"></i>
    <div class="header">
        Login
    </div>

    <div class="ui active dimmer" id="loader" style="display: none">
        <div class="ui text loader">Loading</div>
    </div>

    <div class="content">
        <div class="ui grid">
            <div class="eight wide column centered">
                {!! Form::open(array('route' => 'auth.login', 'method' => 'post','id'=>'formLogin','class' => 'ui large form')) !!}
                <div class="field {!! $errors->has('username') ? 'error' : '' !!}">
                    <div class="ui left icon input">
                        <i class="user icon"></i>
                        {!! Form::text('username','',['name'=>'username','id'=>'username','class' => 'pd','placeholder'=>'Pseudo']) !!}
                    </div>
                    {!! $errors->first('username', '<span class="ui text" id="" style="color: #bf4d4b">:message</span>') !!}
                </div>
                <div class="field {!! $errors->has('password') ? 'error' : '' !!}">
                    <div class="ui left icon input">
                        <i class="lock icon"></i>
                        {!! Form::password('password',['name'=>'password','id'=>'password','class' => '','placeholder'=>'Mot de passe']) !!}
                    </div>
                    {!! $errors->first('password', '<span class="ui text" id="" style="color: #bf4d4b">:message</span>') !!}
                </div>
                {!! Form::submit('Login',['id'=>'loginButton','class'=>'ui fluid large teal submit button']) !!}
                {!! Form::close() !!}
                <div class="ui message">
                    <p>Mot de passe oublié? {{ link_to_route('password.forgot','Réinitialiser',null,null) }}</p>
                    <p>Pas encore membre? {{ link_to_route('auth.register','s\'Enregistrer',null,null) }}</p>
                </div>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

    标签: laravel laravel-5.2


    【解决方案1】:

    抛出错误时不会生成神奇的$errors 变量(在此处更详细地讨论:https://github.com/laravel/framework/issues/11457)。

    您需要在包含引用 $errors 的任何模板上执行 isset($errors)

    <div class="field {!! isset($errors) ? ( $errors->has('username') ? 'error' : '' ) : '' !!}">
    

    【讨论】:

    • 为什么控制器动作抛出异常就没有问题了?
    • 因为当你在控制器中抛出异常时,它会通过路由中间件(特别是ShareErrorsFromSession)。像 404 这样的异常发生在更高级别并绕过它。
    • @user3813360 不确定我明白你的意思吗?
    • 好吧,我在 404 页面上有特殊字符,它们显示不正确.. 生成方式有问题
    • 你有问题字符的例子吗?在您的原始 404 模板中看不到任何特殊字符,我在 404 模板上使用重音字母也没有任何问题。
    【解决方案2】:

    现在我添加了这条路线来捕获任何无效路线:

    Route::any('{catchall}', function($page){
            abort(404,"the page '$page' doesnt exist");
        })->where('catchall', '(.*)');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多