【问题标题】:Laravel 5 package development - Auth::attempt() leads to App\User not foundLaravel 5 包开发 - Auth::attempt() 导致 App\User 未找到
【发布时间】: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 用户提供者根本没有耦合。它获取模型名称作为其构造函数的参数

标签: php laravel laravel-5


【解决方案1】:

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

只需导入 illuminate/auth 包即可。这将为您提供验证用户身份所需的三分之二:

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

您最不需要的是 User 类,或任何实现 AuthenticatableContract 的模型。

Guarduser provider 作为其构造函数的参数之一,而 user provider 将模型的类用作其参数之一构造函数的参数。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2016-09-12
  • 2015-12-10
相关资源
最近更新 更多