В моем общем контроллере 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();
возвращает данные, которые он делает.
Родительский конструктор поможет вам !!
class ItemController extends GeneralController
{
public function __construct()
{
parent::__construct();
....
}
}
Я не уверен, что вы ожидаете с request->domain
, Это вход или вы ожидаете текущий домен?
Если это вход, это правильно. Если вы хотите текущий домен, вы должны использовать parse_url($request->url(), PHP_URL_HOST)
,
Когда вы используете ->first()
(или же find()
), если запрос вернет 0 результатов, значение first будет нулевым.
class GeneralController extends Controller
{
protected $onLine;
public function __construct(Request $request)
{
$this->onLine = OnLine::domain($request->domain)->first();
}
}
В вашем коде нет ничего плохого. Я предполагаю, что вы забыли отправить «домен».
Чтобы упростить отладку, просто замените конструктор жестко закодированным значением (вместо отправки домена $ request-> domain используйте любое значение, которое уже есть в таблице «OnLine»).
После этого проверьте, есть ли у вас значение из $ request. dd($request->all())
; Если это пустой массив, вы забыли отправить домен.
И убедитесь, что вы используете use Illuminate\Http\Request;
,
Это опечатка в вашем ItemController?
use App\Http\Controllers\OnLine\ItemController;
Это должен быть GeneralController, верно?