Разработка пакета Laravel 5 – Auth :: попытка () приводит к App \ User не найден

Я разрабатываю пакет, который обертывает часть логики пользователя Laravel, потому что я хочу сохранить собственную реализацию, добавив к ней некоторую функцию.

Это композитор моего пакета.

{ "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 для повторного использования аутентификации Laravel.

Достаточно просто импортировать пакет light / auth . Это даст вам 2 из 3 вещей, которые необходимы для аутентификации пользователей:

  • Класс защиты (обычно доступный через Auth facade), который предоставляет метод аутентификации (попытка, проверка и т. Д.)
  • Поставщик пользователей, который выбирает пользователей на основе их учетных данных – этот пакет предоставляет как провайдера Eloquent, так и базу данных

Последнее, что вам нужно, это класс пользователя или любая модель, которая реализует AuthenticatableContract .

Guard принимает провайдера пользователя в качестве одного из аргументов своего конструктора, а поставщик пользователя использует класс модели для использования в качестве одного из аргументов своего конструктора.

Эти 3 элемента достаточно, чтобы использовать аутентификацию Laravel.