[英]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.