Laravel 5软件包开发 - Auth :: attempt()导致找不到App \ User

时间:2015-08-03 17:23:24

标签: php laravel laravel-5

我正在开发一个包装一些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原生实现?

1 个答案:

答案 0 :(得分:2)

您不需要使用 laravel / laravel 包来重复使用Laravel的身份验证。

只需导入 illuminate / auth 包即可。这将为您提供验证用户所需的3件事中的2件:

  • Guard 类(通常通过 Auth 外观访问)提供身份验证方法(尝试,检查等)
  • 用户提供商根据用户凭据提取用户 - 此程序包提供Eloquent和数据库用户提供程序

您需要的最后一件事是User类,或任何实现 AuthenticatableContract 的模型。

Guard 用户提供程序作为其构造函数的参数之一,用户提供程序使用模型的类来使用作为其构造者的论据之一。

这3个元素足以使用Laravel的身份验证。