我正在使用 Laravel 5.1 开发一个简单的 Web 应用程序,我的开发环境是 Homestead。
我有一个 View 编辑器可以自动将 Auth::user()
数据传递给管理面板相关的 View 。大多数通用管理面板页面(仪表板、设置等)使用 AdminController
,它扩展了 Laravel 的 Controller
。特定的管理面板页面(用户、订单等)有自己的 Controller (分别为 Admin\UsersController
、Admin\OrdersController
),这些 Controller 是 AdminController
.
routes
中没有为管理面板相关的路由注册任何中间件,而是 AdminController
加载了 auth
中间件(它检查注册用户是否尝试加载页面)。并且没有其他扩展 AdminController
的 Controller 会覆盖构造函数。
我的问题是,如果用户未登录并尝试加载管理面板页面(无论是哪个;仪表板、设置、用户、订单——因为 View 编辑器要求每一个都通过 Auth::user()
data) 没有警告说“你没有被授权。”或者没有重定向到登录页面,只是抛出一个异常,它说 Auth::user()
is null
。
不是先调用了auth
中间件吗?如果不是,我应该怎么做才能防止抛出异常(顺便说一下,return
ing from view composer 对于我的观点来说并不是一个优雅的解决方案)?
提前致谢。
附录
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() { // } }
注意:ComposerServiceProvider
是在config/app.php
中注册的。
最佳答案
你的 Admin\OrdersController
扩展 App\Http\Controllers\Controller
,当它应该扩展 App\Http\Controllers\Admin\AdminController
.这就是您没有获得重定向的原因。
关于php - Laravel 5.1 view composer 在中间件之前启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32532764/