我创建了一个app\lib
文件夹来保留我的自定义助手类。我将它添加到composer.json中的autoload并运行composer dump-autoload
。
为了测试目的,我快速创建了一个名为MyHelper
的类,并尝试实例化它,它确实按预期工作。自定义助手类很好地加载。
在我的申请中,我需要处理日期。所以我选择在Carbon扩展的帮助下工作日期。我发现它已经在Laravel供应商文件夹中了。
为了方便起见,我在alias
中添加了app.php
'Carbon' => 'Carbon\Carbon'
以下是 custom helper class
。 (以下代码工作正常)
class MyHelper{
public $today;
public function __construct(){
$this->today = Carbon::now();
}
在上面的代码中,我通过Carbon::now()
创建了一个碳对象。这似乎没问题并且工作正常但据我所知,最好是进行依赖注入而不是在构造方法中实例化。这将使测试更容易。
所以我修改了上面的构造方法如下:
public function __construct(Carbon $carbon){
$this->today = $carbon->now();
}
但是,上面的代码不起作用。并且错误报告告诉我构造方法的参数必须是Carbon \ Carbon的实例。
传递给Date :: __ construct()的参数1必须是。的实例 碳\碳,没有给出
我还添加了use Carbon\Carbon as Carbon
但没有喜悦。我想我误解了Laravel的一些简单逻辑。可能是依赖注入或解决类的IOC的误解。
启发我..
答案 0 :(得分:2)
您似乎在实例化MyHelper
时遇到了问题。确保将Carbon
传递给构造函数。我相信你有类似
$myHelper = new MyHelper();
但是,构造函数需要Carbon
参数。假设$carbon
是Carbon
个实例,您可以执行以下操作:
$myHelper = new MyHelper($carbon);
编辑: Laravel有一个控制反转,使用如下:
class FooBar {
public function __construct(Baz $baz)
{
$this->baz = $baz;
}
}
$fooBar = App::make('FooBar');
(摘自here)
需要使用make
方法而不是纯PHP构造函数调用。 Laravel应该在引擎盖下正确地调用构造函数。
答案 1 :(得分:0)
请删除别名并尝试 不确定是否需要添加别名,因为你想注入
use Carbon\Carbon;
class MyClass{
protected $today;
public function __construct(Carbon $carbon){
$this->today = $carbon->now();
}
}