Laravel 5缺少页面和authed用户

时间:2017-10-18 09:43:07

标签: php laravel laravel-5.5

我在app\ExceptionsHandler.php中有一些代码检查URL是否存在,如果没有,那么它会检查数据库是否是自定义URL,如果是,那么它将返回一个视图。我认为,这个问题是因为它没有通过Web中间件传递,因为Auth::id()为空,所以没有启动会话和auth,即使我已100%登录

有更简单的方法吗?

public function render($request, Exception $exception)
{
    if($exception instanceof NotFoundHttpException)
    {
        if(\App\EventMeter::isURL()) {
            $ec = new EventsController();
            return $ec->eventMeter();
        }
        if(\App\Tournament::isTournamentURL()) {
            $t = new TournamentController();
            return $t->home();
        }
        if(BountyHunter::isURL())
        {
            $bhc = new BountyHunterController();
            return $bhc->home();
        }

        return response()->view('errors.missing',array(), 404);
    }

    return parent::render($request, $exception);
}

1 个答案:

答案 0 :(得分:3)

也许你应该将责任转移到路线上。

Route::get('{uri}', ['uses' => 'PageController@view', 'as' => 'page'])
      ->where('uri', '.*');

Controller可以处理您的所有视图,并可以执行路由和重定向,允许您拥有所需的任何其他路径。通过创建一个类,例如,可以处理所有不同事件的LayoutService,可以重定向到适当位置的Tournament,Bounty。这将允许您访问所有Web中间件。

// Logic to determine what method you want to be called
$template = 'events|tournament|etc';

if (method_exists($this->layoutService, $template)
       && is_callable(array($this->layoutService, $template))) {
       return call_user_func(
       array($this->layoutService, $template)
    );
}