我可以在laravel 5.2中做到这一点吗?

时间:2016-11-02 17:07:40

标签: laravel laravel-5 laravel-middleware

我开始创建我的应用程序

  1. 使用composer
  2. 安装laravel 5
  3. php artisan migrate --->好的
  4. php artisan make:auth --->好的
  5. php artisan make:controller> AboutController - >好的
  6. 结果:我有" Home"页面(安全页面需要身份验证)和公共页面,"关于"

    路线档案:

    <?php
        Route::get('/', function () {
            return view('welcome');
        });
        Route::auth();
        Route::get('/about', 'AboutController@index');
        Route::get('/home', 'HomeController@index');
        ....
    ?>
    

    关于控制器是这样的:

    <?php namespace App\Http\Controllers; use App\Http\Requests; use
    Illuminate\Http\Request;
    
        class AboutController extends Controller {
    
            public function __construct() {
    
            }
    
            public function index() {
                return view('about');
            }
        }
    

    这是我的about.blade.php文件:

    @extends('layouts.app')
    
    @section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-10 col-md-offset-1">
                <div class="panel panel-default">
                    <div class="panel-heading">About</div>
    
                    <div class="panel-body">
                        About page!
                    </div>
                </div>
            </div>
        </div>
    </div>
    @endsection
    

    当我退出时:
    一切都很好,我可以毫无问题地访问“关于”页面。主页需要登录,很好。

    当我登录时:
    我可以访问主页,那没关系。 但是当我访问about页面时,我在视图页面上收到的错误如下:

      

    AliasLoader.php第63行中的FatalErrorException:&#39; 100&#39;的最大函数嵌套级别到达,流产!

    如果我在“关于”页面中添加:$this->middleware('auth');,那很好,但我不想这样做。

    我已经尝试了所有这些:

    <?php 
        ............
        //$this->middleware('auth');
        //$this->middleware('auth', ['only' => 'create']);
        //$this->middleware('auth', ['only' => ['create', 'edit', 'destroy']]);
        //$this->middleware('guest', ['except' => 'index']);
        //$this->middleware('guest', ['except' => ['index', 'create']]);
        //$this->middleware('guest');
        ........
    ?>
    

    但问题仍然存在。

    看起来这个页面需要中间件,所以,我这样做了:

    <?php
        namespace App\Http\Controllers;
        use App\Http\Requests;
        use Illuminate\Http\Request;
        use Illuminate\Support\Facades\Auth;
    
        class AboutController extends Controller {
    
            public function __construct() {
                if (Auth::check()) {
                    $this->middleware('auth');
                } 
                else {
                    $this->middleware('guest');
                }
            }
    
            public function index() {
                return view('about');
            }
        }
    ?>
    

    在这种情况下,它工作正常,所以我想知道我的解决方案是否良好,或者我是否错了。

1 个答案:

答案 0 :(得分:1)

试试这个:

Route::group(['middleware' => 'auth'], function(){
    Route::get('/about', 'AboutController@index');
    Route::get('/home', 'HomeController@index');
});