我正在使用Laravel 5.1开发一个简单的Web应用程序,我的开发环境是Homestead .
我有一个视图编辑器自动将 Auth::user()
数据传递给管理面板相关视图 . 大多数常规管理面板页面(仪表板,设置等)使用 AdminController
,它扩展了Laravel的 Controller
. 特定的管理面板页面(用户,订单等)有自己的控制器(分别为 Admin\UsersController
, Admin\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()
{
//
}
}
注意: ComposerServiceProvider
在 config/app.php
中注册 .
1 回答
你的
Admin\OrdersController
扩展App\Http\Controllers\Controller
,它应该扩展App\Http\Controllers\Admin\AdminController
. 这就是为什么你没有得到重定向 .