【发布时间】:2016-11-17 17:46:48
【问题描述】:
我是 Laravel 框架的新手,我想扩展一个基本控制器,然后扩展控制器。但是,我发现当我这样做时,我的控制器不再识别我的会话变量。
这是我的代码
namespace App\Http\Controllers\Settings;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Auth\PermissionController;
use App\Fee;
class FeeController extends PermissionController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
dd(session('userdata')['user_urls']);
$data['title']="Fees";
$data['fees']=Fee::all();
return view('settings.fee.index',$data);
}
这是我的 PermissionController 代码
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PermissionController extends Controller {
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(Request $request) {
if(!session('userdata')['user_urls']->contains($request->path())){
dd(session('userdata')['user_urls']);
}
}
}
但我意识到我的session('userdata')['user_urls'] 在 PermissionController 处变为空。但是如果我让 FeeController 扩展 Controller,我的会话变量是完整的。
我需要在权限控制器上使用会话变量进行一些控制。
我在 MAC OSX 和 PHP 7 上运行 Laravel 5.3
【问题讨论】:
-
尝试从 PermissionController 中删除
__construct。也可以在__construct方法的末尾尝试使用parent::construct();。 -
您到底想达到什么目的? @Unche
-
@FelippeDuarte,我需要 __construct 方法,以便其他子控制器可以继承 PermissionController 中的功能。然后,当我添加 parent::__construct();我收到以下错误无法调用构造函数
-
@PassionInfinite 在登录时,每个用户都有基于他/她的用户角色允许的 url。这些 url 是会话中的存储。因此,我想从 PermissionController 检查用户尝试访问的 url,并确保它在会话中的 url 中。否则,重定向离开
-
是的,我知道,这只是为了测试目的。如果我记得的话,会话对象与 Request 对象相结合,这可能会导致您的类/继承出现一些问题。