派生 属性 未从父构造函数初始化
Derived property does not get initialized from parent constructor
在我的通用控制器GeneralController中:
use App\Http\Controllers\Controller;
class GeneralController extends Controller
{
protected $onLine = null;
public function __construct(Request $request)
{
$this->onLine = OnLine::domain($request->domain)->first();
}
}
在我的另一个控制器中,扩展 GeneralController:
use App\Http\Controllers\OnLine\ItemController;
class ItemController extends GeneralController
{
public function getItem(Request $request)
{
dd($this->onLine); // but returns null :(
}
}
我已经检查过 OnLine::domain($request->domain)->first();
returns 数据,确实如此。
父构造器来帮你!!
class ItemController extends GeneralController
{
public function __construct()
{
parent::__construct();
....
}
}
我不确定您对 request->domain
有何期待。这是输入还是您期望当前域?
如果这是一个输入,那是正确的。如果你想要当前域,你应该使用 parse_url($request->url(), PHP_URL_HOST)
.
当你使用->first()
(或find()
)方法时,如果查询return0个结果,'first'的值将为null。
class GeneralController extends Controller
{
protected $onLine;
public function __construct(Request $request)
{
$this->onLine = OnLine::domain($request->domain)->first();
}
}
您的代码没有任何问题。我的猜测是您忘记发送 "domain"。
为了更容易调试,只需使用硬编码值更改您的构造函数(而不是发送 $request->domain,使用 "OnLine" table 中已有的任何值)。
之后,检查您是否有来自 $request 的任何值。 dd($request->all())
;如果这是一个空数组,您忘记发送域了。
并确保使用 use Illuminate\Http\Request;
。
这是您的 ItemController 中的拼写错误吗?
use App\Http\Controllers\OnLine\ItemController;
应该是GeneralController吧?
在我的通用控制器GeneralController中:
use App\Http\Controllers\Controller;
class GeneralController extends Controller
{
protected $onLine = null;
public function __construct(Request $request)
{
$this->onLine = OnLine::domain($request->domain)->first();
}
}
在我的另一个控制器中,扩展 GeneralController:
use App\Http\Controllers\OnLine\ItemController;
class ItemController extends GeneralController
{
public function getItem(Request $request)
{
dd($this->onLine); // but returns null :(
}
}
我已经检查过 OnLine::domain($request->domain)->first();
returns 数据,确实如此。
父构造器来帮你!!
class ItemController extends GeneralController
{
public function __construct()
{
parent::__construct();
....
}
}
我不确定您对 request->domain
有何期待。这是输入还是您期望当前域?
如果这是一个输入,那是正确的。如果你想要当前域,你应该使用 parse_url($request->url(), PHP_URL_HOST)
.
当你使用->first()
(或find()
)方法时,如果查询return0个结果,'first'的值将为null。
class GeneralController extends Controller
{
protected $onLine;
public function __construct(Request $request)
{
$this->onLine = OnLine::domain($request->domain)->first();
}
}
您的代码没有任何问题。我的猜测是您忘记发送 "domain"。
为了更容易调试,只需使用硬编码值更改您的构造函数(而不是发送 $request->domain,使用 "OnLine" table 中已有的任何值)。
之后,检查您是否有来自 $request 的任何值。 dd($request->all())
;如果这是一个空数组,您忘记发送域了。
并确保使用 use Illuminate\Http\Request;
。
这是您的 ItemController 中的拼写错误吗?
use App\Http\Controllers\OnLine\ItemController;
应该是GeneralController吧?