通过Laravel中的依赖注入解决抽象类的依赖 - php

我在使用存储库模式时遇到此问题。当前,我使用一个接口和一个自定义类来实现它,然后将其键入提示到控制器的构造中,由于Laravel,它将自动和递归地解决存储库的依赖关系。

我也在服务提供商中这样做:

$this->app->bind(path/to/repoInterface,path/to/implementationClass)

但是,由于我对这些存储库进行编码的方式,为避免代码重复,我创建了一个抽象类,该类对所有这些存储库都具有通用方法。此类如下:

abstract class CommonRepo{

   public function __construct(SomeModelClass model){}

   public function commonMethod(){//Code here}

我的存储库具有以下结构:

public class ExampleRepository extends CommonRepo implements ExampleRepositoryI{

   public function __construct(){
     parent::__construct();
   }
}

Laravel不喜欢这样,所以它给出了这个错误:

Argument 1 passed to path/to/repo/CommonRepo::__construct() must be an instance of path/to/model/SomeModelClass, none given, called in... 

因此,显然不是在解决类CommonRepo的依赖关系,而是在常规存储库上解决了依赖关系。

我想,如果可能的话,使用类型提示(Laravel方式)而不必做与新运算符有关的任何事情

那么,我如何解决该类的依赖关系?
PD:使用Laravel 5.2

参考方案

像正常函数一样调用父构造函数,而无需接触依赖解析器,因此您应该执行以下两种可能性之一:

public class ExampleRepository extends CommonRepo implements ExampleRepositoryI
{    
    public function __construct(SomeModelClass $model){
        parent::__construct($model);
    }
}

要么

public class ExampleRepository extends CommonRepo implements ExampleRepositoryI
{    
    public function __construct(){
        parent::__construct(App::make(SomeModelClass::class));
    }
}

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

Laravel 5错误报告抑制 - php

在Laravel 4中,抑制E_NOTICE消息很容易;我似乎无法做到这一点,因为如果我添加error_reporting(E_ALL ^ E_NOTICE) 它只是被覆盖的任何地方。这似乎发生在这里:(index.php)$response = $kernel->handle( $request = Illuminate\Http\Request::…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

更改默认的URL PHP - php

如何更改默认网址。例如www.example.com/index.php-> www.example.com现在,我要将其设置为www.example.com/test.php。我应该在php.ini中进行更改吗? 参考方案 假设您正在使用apache,则可以通过DirectoryIndex指令执行此操作。Check out the docs。