【发布时间】:2023-03-15 10:29:01
【问题描述】:
我有一个控制器
use API\Transformer\DataTransformer;
use API\Data\DataRepositoryInterface;
class DataController extends APIController implements APIInterface {
protected $data;
public function __construct(DataRepositoryInterface $data)
{
$this->data = $data;
}
而在APIController
use League\Fractal\Resource\Collection;
use League\Fractal\Resource\Item;
use League\Fractal\Manager;
class APIController extends Controller
{
protected $statusCode = 200;
public function __construct(Manager $fractal)
{
$this->fractal = $fractal;
// Are we going to try and include embedded data?
$this->fractal->setRequestedScopes(explode(',', Input::get('embed')));
$this->fireDebugFilters();
}
APIController __construct() 中的任何内容都没有被调用,我尝试过 parent::__construct();,但是当我尝试从 APIController 调用类时出现此错误(请参阅下面的错误)
Argument 1 passed to APIController::__construct() must be an instance of League\Fractal\Manager, none given, called in /srv/app.dev/laravel/app/controllers/DataController.php on line 12 and defined
换句话说,它试图在 DataController 中实例化 APIController 构造函数。如何让它在DataController 之前调用APIController 构造函数?
【问题讨论】:
-
没错——它是
parent::__construct() -
即使将
parent::__construct()添加到DataController,您仍然需要将Manager 对象传递给父构造函数。我从未见过具有不同构造函数签名的父/子类,并不是说不能这样做,但它确实表明设计中存在潜在的危险信号。
标签: php oop constructor laravel