首页 文章

Laravel 5.1视图编辑器在中间件之前启动

提问于
浏览
3

我正在使用Laravel 5.1开发一个简单的Web应用程序,我的开发环境是Homestead .

我有一个视图编辑器自动将 Auth::user() 数据传递给管理面板相关视图 . 大多数常规管理面板页面(仪表板,设置等)使用 AdminController ,它扩展了Laravel的 Controller . 特定的管理面板页面(用户,订单等)有自己的控制器(分别为 Admin\UsersControllerAdmin\OrdersController ),扩展名为 AdminController .

routes 中没有为管理面板相关路由注册任何中间件,而是 AdminController 加载 auth 中间件(检查注册用户是否尝试加载页面) . 并且没有其他扩展 AdminController 的控制器会覆盖构造函数 .

我的问题是,如果用户没有登录并尝试加载管理面板页面(无关紧要;仪表板,设置,用户,订单 - 因为视图编写器要求每一个都传递 Auth::user() 数据)没有警告说"You are not authorized."或没有重定向到登录页面,只是抛出一个异常,说 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()
    {
        //
    }
}

注意: ComposerServiceProviderconfig/app.php 中注册 .

1 回答

  • 2

    你的 Admin\OrdersController 扩展 App\Http\Controllers\Controller ,它应该扩展 App\Http\Controllers\Admin\AdminController . 这就是为什么你没有得到重定向 .

相关问题