派生属性不会从父构造函数

时间:2018-01-19 12:30:06

标签: php laravel oop laravel-5 derived-class

在我的通用控制器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 个答案:

答案 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();
         ....
    }
}