在我的通用控制器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();
会返回数据。
答案 0 :(得分:2)
我不确定您对request->domain
的期望是什么。这是输入还是您期望当前的域名?
如果这是输入,那是正确的。如果您想要当前域,则应使用parse_url($request->url(), PHP_URL_HOST)
。
当您使用->first()
(或find()
)方法时,如果查询返回0结果,则“first”的值将为null。
class GeneralController extends Controller
{
protected $onLine;
public function __construct(Request $request)
{
$this->onLine = OnLine::domain($request->domain)->first();
}
}
您的代码没有任何问题。我的猜测是你忘了发送“域名”。
为了便于调试,只需使用硬编码值更改构造函数(而不是发送$ request->域,使用“OnLine”表中已有的任何值)。
之后,检查$ request是否有任何值。 dd($request->all())
;如果这是一个空数组,则忘记发送域。
并确保使用use Illuminate\Http\Request;
。
答案 1 :(得分:1)
这是ItemController中的拼写错误吗?
use App\Http\Controllers\OnLine\ItemController;
它应该是GeneralController,对吧?
答案 2 :(得分:0)
父构造函数会帮助你!!
class ItemController extends GeneralController
{
public function __construct()
{
parent::__construct();
....
}
}