50

好的,我刚开始使用 Lumen,我正在尝试使用 Auth,但是调用 Auth::check 或 Auth.. 的任何其他函数会导致以下错误 致命错误:在供应商中找不到类 'Memcached' \illuminate\cache\MemcachedConnector.php 在第 52 行。我不想用 Memcached 以前没用过。

我在.env文件中禁用了它,并将CACHE_DRIVERSESSION_DRIVER设置为数组,但仍然显示相同的错误。

我决定不再使用 Auth 并使用会话/令牌手动处理我的身份验证,但启用 MiddleWare StartSession 结果到相同的错误。

$app->middleware([
 // 'Illuminate\Cookie\Middleware\EncryptCookies',
 // 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
  'Illuminate\Session\Middleware\StartSession',
 // 'Illuminate\View\Middleware\ShareErrorsFromSession',
 // 'Laravel\Lumen\Http\Middleware\VerifyCsrfToken',
]);

如果有人真的可以在这里帮助我,我会很高兴

编辑

在框架中深入一点之后,我SessionManager在方法内的类中硬编码了会话驱动程序名称getSessionConfig

public function getSessionConfig()
{
    $this->setDefaultDriver("cookie");//I added this line
    return $this->app['config']['session'];
}

它虽然有效,但不是一种很好的做事方式。没有配置文件,我相信所有配置都写在.env文件中,但我真的不知道为什么 session_driver 和 cache_driver 被默认为 memecached 即使在 .env 中更改它然后运行composer dump-autoload... Lumen :(

编辑 这是我的.env文件

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomKey!!!

APP_LOCALE=en
APP_FALLBACK_LOCALE=en

DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=

CACHE_DRIVER=array
SESSION_DRIVER=cookie
QUEUE_DRIVER=database

我的 bootsrap/app.php 中已经取消了这一行的注释

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

我的数据库配置工作得很好,所以 .env 文件加载得很好。

4

12 回答 12

46

我今天在这个问题上花了 3 个小时。借助本主题中 demve 的帖子,我找到了解决方案。非常简单!我希望它不会影响我以后的发展。

只是为了它,在.env文件中:

CACHE_DRIVER=array
SESSION_DRIVER=array
QUEUE_DRIVER=array

好的,我进行了更新,因为我遇到了有关会话的新问题。实际上,当您设置先前的参数时,您的会话将不会像文档中所说的那样持久化:array - sessions will be stored in a simple PHP array and will not be persisted across requests.

所以我必须改变它,总是在.env这样的文件中:

SESSION_DRIVER=cookie

有了 avar_dump(Session::all());我现在可以看到我的会话的全部价值

于 2015-05-09T18:06:49.090 回答
20

您可能需要重新启动服务器,尤其是在使用php artisan serve.

Lumen 似乎不会.env根据请求获取更改。

我遇到了完全相同的问题 - 尝试使用文件缓存,但收到有关 Memcached 的错误 - 重新启动服务器会重新加载.env文件。

于 2015-04-28T23:30:51.203 回答
12

这个问题在我安装这个包时解决了所以至少试试

首先我尝试了这个,它工作正常

CACHE_DRIVER = array 

但后来想想是什么memcached

然后我尝试了这个,它可以正常工作而无需更改驱动程序memcached

apt-get install php-memcached 

yum 包管理器或在 Amazon Linux 中。

yum install php-memcached -y
于 2017-06-20T21:29:57.330 回答
8

在 .env 文件中替换

#This line:- 
  CACHE_DRIVER = memcached

#With this:- 
   CACHE_DRIVER = array
于 2017-04-10T06:13:16.960 回答
7

确保不要被未加载的 .env 文件所吸引,默认情况下它在 Lumen 中被注释掉。因此,如果您在 .env 中指定不同的缓存驱动程序,请执行以下操作。

注意:如果您使用 .env 文件来配置应用程序,请不要忘记在 bootstrap/app.php 文件中取消注释 Dotenv::load() 方法。

来源: http: //lumen.laravel.com/docs/cache

于 2015-05-04T19:13:54.480 回答
4

在您的.env文件中,您也可以使用CACHE_DRIVER=file而不是CACHE_DRIVER=memcached

于 2017-05-10T09:49:17.827 回答
2

在我的情况下,我添加CACHE_DRIVER=array了 .env 文件
然后

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

在我bootstrap/app.php.env文件开始工作。

于 2015-06-19T11:33:35.923 回答
2

对我来说,问题是我使用了 homestead 存储库的 php-7 分支,它没有准备好 PHP memcached。

于 2015-10-28T19:14:22.313 回答
1

我现在有一个类似的问题,我无法追踪它,但我的猜测是它与默认配置存储在vendor/laravel/lumen-framework/config文件夹、DotEnv::$inmutable设置和artisan serve服务器中的事实有关。

对我有用的解决方案是:

  1. 添加bootstrap/app.php以下内容: Dotenv::makeMutable(); Dotenv::load(__DIR__.'/../'); Dotenv::makeImmutable();

  2. .env文件中,将所有配置设置为“基本驱动程序”(数组、文件),即使您不打算使用它们,因为您 w

于 2015-05-08T16:06:11.820 回答
-1

如果你有一个新的 lumen 安装,你必须重命名.env.example.env. 所以它可以读取你的配置!

于 2017-07-28T06:39:16.013 回答
-1

如果您的 .env 文件由尝试运行 artisan 命令的用户之外的其他用户拥有,则会发生这种情况。

于 2017-12-12T16:07:07.193 回答
-2

检查是否memcached已安装,如果未安装,请运行:

apt-get install php5-memcached
于 2017-03-10T13:01:09.070 回答