Производное свойство не инициализируется из родительского конструктора

В моем общем контроллере 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(); возвращает данные, которые он делает.

3

Решение

Родительский конструктор поможет вам !!

class ItemController extends GeneralController
{
public function __construct()
{
parent::__construct();
....
}
}
0

Другие решения

Я не уверен, что вы ожидаете с 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;,

2

Это опечатка в вашем ItemController?

use App\Http\Controllers\OnLine\ItemController;

Это должен быть GeneralController, верно?

1
По вопросам рекламы [email protected]