Slim框架集成illuminate/database后无法使用Hash::make怎么解决
根因分析
- 你当前仅安装了
illuminate/database组件,Hash相关功能属于独立的illuminate/hashing组件,并未安装 - Illuminate的Facade依赖Laravel应用容器的上下文,你在Slim框架中没有手动初始化Facade的访问上下文,就算安装了组件直接调用
Hash::make也会报错 - 哈希功能依赖基础配置项,未配置的情况下组件无法正常运行
可行解决方案
步骤1:安装缺失的依赖组件
执行命令:
composer require illuminate/hashing:^6.8 illuminate/config:^6.8
也可以手动修改composer.json的require段,添加对应依赖后执行composer update:
{ "require": { "slim/slim": "3.0", "illuminate/database": "^6.8", "illuminate/hashing": "^6.8", "illuminate/config": "^6.8", "monolog/monolog": "^2.0" } }
步骤2:调整代码初始化哈希组件
两种使用方式可选:
方式1(更推荐,无需依赖Facade):直接实例化哈希组件存入Slim容器调用
修改你的测试代码如下:
<?php require 'vendor/autoload.php'; require 'app.php'; $container = $app->getContainer(); // 初始化Eloquent连接 $capsule = new \Illuminate\Database\Capsule\Manager; $capsule->addConnection($container['settings']['db']); $capsule->setAsGlobal(); $capsule->bootEloquent(); // 数据库实例存入容器 $container['db'] = function ($container){ return $capsule; }; // 新增:初始化哈希配置 $hashConfig = new \Illuminate\Config\Repository([ 'hashing' => [ 'driver' => 'bcrypt', 'bcrypt' => [ 'rounds' => 10 ] ] ]); // 新增:哈希管理器存入容器 $container['hash'] = function ($c) use ($hashConfig) { return new \Illuminate\Hashing\HashManager($hashConfig); }; // 直接调用生成哈希 echo $container['hash']->make('wonder');
方式2(坚持要使用Hash::make Facade调用):额外初始化Facade上下文
在上述代码的基础上,新增一行Facade绑定配置:
\Illuminate\Support\Facades\Facade::setFacadeApplication($container);
之后就能正常调用Hash::make('wonder')了。
轻量替代方案
如果你不需要用到Illuminate哈希组件的全部功能,也可以直接使用PHP原生方法实现完全相同的效果,无需安装额外依赖:
// 生成哈希,和Hash::make默认效果完全一致 echo password_hash('wonder', PASSWORD_BCRYPT, ['cost' => 10]); // 验证哈希对应原生方法 password_verify($输入密码, $存储的哈希值);
内容的提问来源于stack exchange,提问作者sdx11
相关产品推荐
相关产品推荐

