我正在开发一个包装一些Laravel用户逻辑的包,因为我想在保留原生实现的同时添加一些功能。
这是我的包的composer.json
{
"name": "foo/bar",
"description": "A Laravel 5 package",
"authors": [
{
"name": "",
"email": ""
}
],
"require": {
"php": ">=5.4.0",
"illuminate/auth": "5.1.*"
},
"require-dev": {
"orchestra/testbench": "~3.0"
},
"autoload": {
"psr-4": {
"Foo''": "src/Foo/"
}
},
"minimum-stability": "stable"
}
这是一个示例代码:
class Foo {
function login($username, $password) {
'Auth::attempt($username, $password);
}
}
这是一个示例测试用例
class UserServiceTest extends 'Orchestra'Testbench'TestCase {
function testLogin() {
$foo = new Foo();
$foo->login('foo', 'bar');
}
}
现在,当运行测试时,我得到这个PHP Fatal error: Class ''App'User' not found in path/to/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php on line 126
我可以理解为什么(应用程序'用户生活在laravel/laravel
包),但我无法理解如何正确声明我的包依赖关系。
我应该怎么做才能重用整个Auth和User laravel原生实现?
为了重用laravel的认证,你不需要使用laravel/laravel包。
只要导入illuminate/auth包就足够了。这将为您提供验证用户所需的3个条件中的2个:
- Guard类(通常通过Auth facade访问),提供认证方法(尝试,检查等)
- 根据用户的凭据获取用户的用户提供程序——这个包同时提供Eloquent和Database用户提供程序
你最不需要的就是一个User类,或者任何实现 authenticatableccontract 的Model。
Guard接受user provider作为其构造函数的参数之一,user provider接受要使用的模型的类作为其构造函数的参数之一。
这3个元素足以使用Laravel的身份验证。