Laravel 5, как правильно сделать объект?

У меня есть служба для 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 в конструкторе для всех методов контроллера?

0

Решение

Без сообщения об ошибке довольно сложно ответить на ваш вопрос. Это может быть что угодно, от опечатки до полной тупиковой ситуации при загрузке ваших зависимостей.

Это сказал. Возможно, вы не добавили свой сервис в контейнер сервисов: 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 и это должно работать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector