Php Laravel 5身份验证重定向-它可以工作,但它正确吗?

Php Laravel 5身份验证重定向-它可以工作,但它正确吗?,php,laravel,authentication,laravel-5,laravel-5.1,Php,Laravel,Authentication,Laravel 5,Laravel 5.1,让我来解释一下 如果客人进入/目录,他是受欢迎的。如果来宾试图转到/start目录,他将被重定向到登录页面 来宾登录后,会被重定向到/start目录。如果登录用户转到/目录,他将再次被重定向到/start目录。(登录后无需查看主页) 我让它按照我想要的方式工作,但是我不确定我是否按照Laravel的意图这样做,因为在我的PagesController.php中有一些非干代码。另外,我基本上是将PagesController重定向到PagesController(对我来说,这听起来不像是遵循好的实

让我来解释一下

如果客人进入
/
目录,他是受欢迎的。如果来宾试图转到
/start
目录,他将被重定向到登录页面

来宾登录后,会被重定向到
/start
目录。如果登录用户转到
/
目录,他将再次被重定向到
/start
目录。(登录后无需查看主页)

我让它按照我想要的方式工作,但是我不确定我是否按照Laravel的意图这样做,因为在我的
PagesController.php
中有一些非干代码。另外,我基本上是将PagesController重定向到PagesController(对我来说,这听起来不像是遵循好的实践)

下面是
routes.php

<?php

Route::get('', 'PagesController@index');

Route::get('start', 'PagesController@start');

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController'
]);
<?php

namespace App\Http\Controllers;

use App\HowItWorksModel;
use App\WhatYouGetModel;
use App\StartContentModel;
use Illuminate\Http\Request;

use Auth;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class PagesController extends Controller
{
    public function index()
    {
        if (Auth::check()) {
            return redirect()->action('PagesController@start');
        }

        $howItWorksContent = HowItWorksModel::all();

        $whatYouGetContent = WhatYouGetModel::all();

        return view('pages.index', compact(
            'howItWorksContent',
            'whatYouGetContent'
        ));
    }

    public function start()
    {
        if (Auth::check()) {
            $startContent = StartContentModel::all();

            return view('pages.start', compact(
                'startContent'
            ));
        }

        return redirect('/auth/login');
    }
}
我如何重新构造它,使其完全按照现在的工作方式工作,但考虑到更好的实践?或者,我所做的一切是否完全符合这些目的?

最好是使用中间件,使用中间件将承担控制器的身份验证责任,并让它担心内容,这将使控制器轻便且易于维护


您应该使用

您可以尝试这样的方法。与您所拥有的没有太大区别,但确实会减少代码

<?php

namespace App\Http\Controllers;

use App\HowItWorksModel;
use App\WhatYouGetModel;
use App\StartContentModel;
use Illuminate\Http\Request;

use Auth;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class PagesController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth', ['except' => 'index']);
    }

    public function index()
    {
        if (Auth::check())
            return redirect('start');

        $howItWorksContent = HowItWorksModel::all();

        $whatYouGetContent = WhatYouGetModel::all();

        return view('pages.index', compact(
            'howItWorksContent',
            'whatYouGetContent'
        ));
    }

    public function start()
    {
       $startContent = StartContentModel::all();

       return view('pages.start', compact(
           'startContent'

    }
}

也许可以看看,它很可能就是你想要的。谢谢你的建议!谢谢,你能详细说明一下构造器在做什么吗?以前从未使用过中间件,但我真的很想遵循良好的实践,所以我想我现在就使用它。啊,很好,我现在得到了它。再次感谢。将中间件视为介于您的请求和视图之间。中间件负责确保请求适合视图。