我正在开发一个包装一些Laravel User逻辑的包,因为我想在保留原生实现的同时为它添加一些功能。
这是我的包的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
我可以理解为什么(App \ User存在于laravel/laravel
包中),但我无法理解如何正确声明我的包依赖项。
我应该怎么做才能重用整个Auth和用户laravel原生实现?
答案 0 :(得分:2)
您不需要使用 laravel / laravel 包来重复使用Laravel的身份验证。
只需导入 illuminate / auth 包即可。这将为您提供验证用户所需的3件事中的2件:
您需要的最后一件事是User类,或任何实现 AuthenticatableContract 的模型。
Guard 将用户提供程序作为其构造函数的参数之一,用户提供程序使用模型的类来使用作为其构造者的论据之一。
这3个元素足以使用Laravel的身份验证。