Я разрабатываю пакет, который обертывает часть логики пользователя 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 вещей, которые необходимы для аутентификации пользователей:
Последнее, что вам нужно, это класс пользователя или любая модель, которая реализует AuthenticatableContract .
Guard принимает провайдера пользователя в качестве одного из аргументов своего конструктора, а поставщик пользователя использует класс модели для использования в качестве одного из аргументов своего конструктора.
Эти 3 элемента достаточно, чтобы использовать аутентификацию Laravel.