Php Laravel 5.5将变量传递给子控制器是否始终返回null?
我有一个主控制器CmsController,它扩展到默认的Laravel控制器:Php Laravel 5.5将变量传递给子控制器是否始终返回null?,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个主控制器CmsController,它扩展到默认的Laravel控制器: use App\Http\Controllers\Controller; class CmsController extends Controller { protected $web = null; public function __construct(Request $request) { $this->web = Web::domain($request-&g
use App\Http\Controllers\Controller;
class CmsController extends Controller
{
protected $web = null;
public function __construct(Request $request)
{
$this->web = Web::domain($request->domain)->first();
}
}
现在,在这个控制器中,我想调用$this->web
use App\Http\Controllers\Web\PageController;
class PageController extends CmsController
{
public function getPage(Request $request)
{
dd($this->web); // returns always null
}
}
应该返回的数据是100%正确的,请求参数也在那里
有人能告诉我我做错了什么吗?因为中间件还没有运行,所以您无法访问控制器构造函数中的会话或经过身份验证的用户,即使您执行了
dd($this->web)
在CmsController构造中,您将得到null,因此您可以这样做:
use App\Http\Controllers\Controller;
class CmsController extends Controller
{
protected $web = null;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->web = Web::domain($request->domain)->first();
return $next($request);
});
}
}
您正在扩展
CmsController
并使用PageController
这就是为什么
use App\Http\Controllers\Web\CmsController;
class PageController extends CmsController
{
public function getPage(Request $request)
{
dd($this->web); // returns always null
}
}
我变了,
use App\Http\Controllers\Web\PageController;
对此,
use App\Http\Controllers\Web\CmsController;
我认为您需要执行父构造函数:
class PageController extends CmsController
{
public function __construct()
{
parent::__construct();
....
}
}
回答很好,但是最好创建一个中间件类,不需要它,只需通过
中间件方法:)将请求插入,这是干净代码所需要的,单一责任和可读性。好的,即使您创建了一个新的,您也需要在控制器构造中调用$this->middleware
方法,因为中间件尚未运行!我不是说删除$this->middleware
部分,只是为了创建一个中间件类并在那里调用它:)您是否尝试过执行父构造函数@GautamPatadiya非常感谢您的想法,这正是我想要的解决方案:)我在我的构造方法中添加了:parent::u construct($request);