У меня есть служба для UserController
class UserService
{
protected $user;
public function __construct(User $user) {
$this->user = $user;
}
public function getAll()
{
$this->user->get();
// do something with $this->user
}
public function update($data)
{
return $this->user->update($data);
}
}
class UserController extends Controller
{
private $service;
public function __construct(UserService $service)
{
$this->service = $service; // < ------ error
}
public function index(User $user)
{
return $this->service->getAll();
}
public function update(Request $request, User $user)
{
return $this->service->update();
}
}
Нужно избегать ситуации, когда я должен сделать объект внутри каждого метода контроллера
Как сделать объект из UserService с параметром $ user в конструкторе для всех методов контроллера?
Без сообщения об ошибке довольно сложно ответить на ваш вопрос. Это может быть что угодно, от опечатки до полной тупиковой ситуации при загрузке ваших зависимостей.
Это сказал. Возможно, вы не добавили свой сервис в контейнер сервисов: https://laravel.com/docs/5.7/controllers#dependency-injection-and-controllers
Создать ServiceProvider
к вашим услугам вот так:
<?php
namespace App\Providers;
use YourNameSpace\UserService;
use Illuminate\Support\ServiceProvider;
class UserServiceProvider extends ServiceProvider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
$this->app->singleton(UserService::class, function ($app) {
return new UserService($app->user)); // Not sure it's $app->user. But you probably know what to do.
});
}
}
Затем запустите composer dump-autoload
и это должно работать.
Других решений пока нет …