【发布时间】:2015-08-04 08:15:36
【问题描述】:
我正在开发一个封装了一些 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
我可以理解原因(App\User 位于 laravel/laravel 包中),但是我不明白如何正确声明我的包依赖项。
我应该怎么做才能重用整个 Auth 和 User laravel 原生实现?
【问题讨论】:
-
首先声明 laravel/laravel 作为你的依赖,否则 \App\User 类就不存在了。
-
另一件事是 laravel/laravel 是一个基础应用程序,如果 User 类是您唯一需要的东西,那么包含它是没有意义的。将用户类添加到您的包中,或者只是假设任何将使用您的包的应用程序都将拥有自己的用户类 - 大多数都会。
-
我知道,但这不是唯一的解决方案——将整个 laravel 应用程序添加为依赖项来开发 laravel 包似乎有点奇怪。
-
是的,但是如果你想使用一个包形式的类,你需要将该包添加为依赖项,对吧?这就是为什么我建议你自己实现用户类
-
Eloquent 用户提供者根本没有耦合。它获取模型名称作为其构造函数的参数