Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.5将变量传递给子控制器是否始终返回null?_Php_Laravel_Laravel 5 - Fatal编程技术网

Php Laravel 5.5将变量传递给子控制器是否始终返回null?

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

我有一个主控制器CmsController,它扩展到默认的Laravel控制器:

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);