Lumen Cache \ Store不可实例化

时间:2016-06-21 13:32:05

标签: caching laravel-5 lumen

我对Laravel和Lumen很新,所以我的问题可能有点简单,但我还没有找到任何有用的答案。

流明版本为5.1

所以我尝试创建一个缓存支持的数据存储库。首先,我想使用FileStore,然后我想转向更合适的一些。

我尝试像这样注入Cache存储库:

<?php

    namespace App\Repositories;

    use Illuminate\Cache\Repository;

    class DataRepository
    {
        private $cache;

        public function __construct(Repository $cache)
        {
            $this->cache = $cache;
        }
    }

对我来说似乎很简单。但是当我尝试在我的控制器中使用这个repo,并尝试将此repo注入其中时,在实例化期间我收到以下错误:

BindingResolutionException in Container.php line 749:
Target [Illuminate\Contracts\Cache\Store] is not instantiable.

我猜测存储库找不到匹配和可用的商店实现。当我尝试将Store绑定到\ Illumante \ Cache \ FileStore时,如下所示:

$this->app->bind(\Illuminate\Contracts\Cache\Store::class, \Illuminate\Cache\FileStore::class);

我遇到了一种新的错误:

Unresolvable dependency resolving [Parameter #1 [ <required> $directory ]] in class Illuminate\Cache\FileStore

我想我的配置问题比较复杂,所以我不想浏览依赖树。

.env我有这些:

CACHE_DRIVER=fileSESSION_DRIVER=file

在Lumen中,我明确启用了外观,DotEnv(以及我的数据存储库的口才)。

Dotenv::load(__DIR__.'/../');

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

$app->withFacades();
$app->withEloquent();

我尝试添加cache.php配置。在bootstrap / app.php中,我添加了$app->configure('cache');以使用以下配置:

<?php

return [
    'default' => env('CACHE_DRIVER', 'file'),

    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => storage_path('framework/cache'),
        ],
    ],
];

你能帮帮我吗,我怎样才能正确引导缓存?

1 个答案:

答案 0 :(得分:6)

答案

Lumen中的缓存实现注册为:

Illuminate\Contracts\Cache\Repository

不会

Illuminate\Cache\Repository

因此,您可以将代码更改为:

<?php

namespace App\Repositories;

use Illuminate\Contracts\Cache\Repository;

class DataRepository
{
    private $cache;

    public function __construct(Repository $cache)
    {
        $this->cache = $cache;
    }
}
  

P.S 您不需要配置缓存,因为流明会自动配置任何缓存配置。

技巧

但如果您仍想使用Illuminate\Cache\Repository,则可以先在ServiceProviderbootstrap/app.php文件中将其绑定:

use Illuminate\Cache\Repository as CacheImplementation;
use Illuminate\Contracts\Cache\Repository as CacheContract;

$app->singleton(CacheImplementation::class, CacheContract::class);