[英]Laravel 5.1 view composer initiates before middleware
我正在使用Laravel 5.1开发一个简单的Web应用程序,我的开发环境是Homestead。
我有一个视图编辑器自动将Auth::user()
数据传递给管理面板相关的视图。 大多数常规管理面板页面(仪表板,设置等)使用AdminController
,它扩展了Laravel的Controller
。 特定的管理面板页面(用户,订单等)有自己的控制器(分别是Admin\\UsersController
, Admin\\OrdersController
),它们是扩展的AdminController
。
在没有注册的任何中间件routes
的管理面板相关的路线,而不是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() { // } }
注意: ComposerServiceProvider
在config/app.php
注册。
你的Admin\\OrdersController
扩展App\\Http\\Controllers\\Controller
,它应该扩展App\\Http\\Controllers\\Admin\\AdminController
。 这就是为什么你没有得到重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.