我正在使用Laravel 5.1开发一个简单的Web应用程序,并且我的开发环境是Homestead。
我有一个视图组成器来自动将
在路由中没有任何中间件注册管理面板相关路由。相反,
我的问题是,如果未登录用户尝试加载管理面板页面(无论是哪一个;仪表板、设置、用户、订单 - 因为视图组成器为每个页面调用以传递
难道不应该首先调用
提前致谢。
我有一个视图组成器来自动将
Auth::user()
数据传递给与管理面板相关的视图。大多数常规管理面板页面(仪表板、设置等)使用AdminController
,它扩展了Laravel的Controller
。特定的管理面板页面(用户、订单等)有它们自己的控制器(分别是Admin\UsersController
,Admin\OrdersController
),这些控制器都扩展了AdminController
。在路由中没有任何中间件注册管理面板相关路由。相反,
AdminController
加载auth
中间件(它检查注册的用户是否试图加载页面)。没有其他扩展AdminController
的控制器覆盖构造函数。我的问题是,如果未登录用户尝试加载管理面板页面(无论是哪一个;仪表板、设置、用户、订单 - 因为视图组成器为每个页面调用以传递
Auth::user()
数据),就没有警告说“您未获得授权。”或者没有重定向到登录页面,只是抛出一个异常,该异常称Auth::user()
是null
。难道不应该首先调用
auth
中间件吗?如果不是,那我应该怎么做才能防止抛出异常(从视图组成器中的return
并不是一个优雅的解决方案)?提前致谢。
AdminController
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class AdminController extends Controller { public function __construct() { // After middlewares $this->middleware("auth"); $this->middleware("admin"); // Before middlewares $this->middleware("no-cache"); } /** * Display a listing of the resource. * * @return Response */ public function index() { return view("admin.index"); } }
Admin\OrdersController
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use App\Order; class OrdersController extends Controller { /** * Display a listing of the resource. * * @return Response */ public function index() { $orders = Order::with("address")->get(); return view("admin.orders.index")->with("orders", $orders); } }
ComposerServiceProvider
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Auth; class ComposerServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { view()->composer("layouts.admin.default", function ($view) { $admin = Auth::user(); $view->with([ "admin" => $admin, "picture" => $admin->pictures[0] ]); }); } /** * Register the application services. * * @return void */ public function register() { // } }
config/app.php
中注册了 ComposerServiceProvider
。
Route :: get('foo',['middleware' => 'auth'/*其余*/]);
- Hkan