Laravel中使用DirectoryEmulator创建组织单元报config类不存在错误
解决LDAPRecord测试中
Target class [config] does not exist错误 可能原因1:LDAP模型静态属性依赖config()助手
如果你的OrganizationalUnit模型中使用静态属性直接调用config()助手,比如:
use LdapRecord\Models\OrganizationalUnit; class OrganizationalUnit extends OrganizationalUnit { protected $baseDn = config('ldap.default.base_dn'); }
这种写法会在类加载阶段就执行config(),而此时Laravel容器尚未完全初始化,导致找不到config类。
解决方法
将静态属性改为动态获取,比如通过重写getBaseDn()方法:
use LdapRecord\Models\OrganizationalUnit as BaseOrganizationalUnit; class OrganizationalUnit extends BaseOrganizationalUnit { protected function getBaseDn() { return config('ldap.default.base_dn'); } }
或者在构造函数中设置:
public function __construct(array $attributes = []) { parent::__construct($attributes); $this->baseDn = config('ldap.default.base_dn'); }
可能原因2:LDAP模型未正确继承LDAPRecord基类
确保你的OrganizationalUnit模型正确继承自LDAPRecord的官方基类,而非未集成Laravel容器的自定义类:
// 直接使用官方基类 use LdapRecord\Models\OrganizationalUnit; // 或自定义模型继承官方基类 use LdapRecord\Models\OrganizationalUnit as BaseOrganizationalUnit; class OrganizationalUnit extends BaseOrganizationalUnit { // 自定义逻辑 }
可能原因3:未指定LDAP连接创建模型
在测试中,显式指定模型使用DirectoryEmulator初始化的LDAP连接:
$ou = OrganizationalUnit::on('default')->create([ 'ou' => 'Service Groups' ]);
可能原因4:DirectoryEmulator配置问题
尝试去掉自定义的SQLite数据库路径,使用默认内存数据库测试:
$fake = DirectoryEmulator::setup('default');
如果问题解决,再排查指定SQLite文件的权限或路径是否正确。
内容的提问来源于stack exchange,提问作者StarkesWeb
相关产品推荐
相关产品推荐

