Hsin

119 经验值

在执行这个构造方法的时候,Laravel 的服务容器会自动注入UserRepository 的实例。

@JellyBool 额,不好意思。忘了说我用的是Lumen,Lumen的这个是在根目录里面的。

@JellyBool 我把根目录下的composer.json里面的"vlucas/phpdotenv": "~1.0"改成了"vlucas/phpdotenv": "~2.0",然后再根目录执行composer update

@JellyBool 我是在项目的根目录下的update。更新后/vendor/vlucas/phpdotenv/src下的类从一个Dotenv.php变成了三个类,是这个原因导致不能自动加载的吗?

我在.env文件里面设置了一个值为0的变量,可是用env()取出来的时候它的值为空字符串""。调试发现是phpdotenv的问题。在vendor/vlucas/phpdotenv/Dotenv.php中有如下代码:

......
    protected static function sanitiseVariableValue($value)
    {
        $value = trim($value);
        if (!$value) {
            return '';
        }
        ......
     }
......

可以看出来,当$value为0是就返回空字符串

所以我就想更新一下phpdotenv的版本看看能不能解决这个问题。
可是我用Composer更新之后,访问页面出现了

Fatal error: Class 'Dotenv' not found in bootstrap\app.php on line 5

的错误提示。
请问这个问题要怎么解决?

我在Provider中用singleton() 注册了一个实例,为什么不是单例的?每次注入的时候都会调用构造函数。

ExampleProvider.php


class ExampleProvider extends ServiceProvider
{
   public function register()
    {
        $this->app->singleton('App\Example', function () {
            return new Example();
        });
    }
}

routes.php

Route::get('test', function (Example $example) {
    return '';
});