Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Service Container

Estou precisando injetar classes e estou confuso sobre a melhor forma de fazê-lo.

Supondo que o jeito demonstrado a seguir não é o ideal, qual jeito correto de se injetar e auto-resolver uma dependência?

O jeito que encontrei foi passando a TarefaInterface no Controller. Busco uma solução sem usar __construct(TarefasInterface $tarefas) e setters.

Tarefas:

namespace App\Classes\Tarefas;

class Tarefas implements TarefasInterface
{
    public function adicionar($dadosTarefa, $tarefasUsuario)
    {
        // ...
    }
}

TarefasInterface:

namespace App\Classes\Tarefas;

interface TarefasInterface
{
    public function adicionar($dadosTarefa, $tarefasUsuario);
}

TarefasController:

use Illuminate\Http\Request;
use App\Classes\TarefasInterface;
use App\Classes\TarefasUsuarioInterface;

class TarefasController extends Controller
{
    public function adicionar(Request $request, TarefasInterface $tarefas, TarefasUsuarioInterface $tarefasUsuario)
    {
        $tarefa = $tarefas->armazenar($request->all(), $tarefasUsuario);

        return redirect()->route('tarefas.edit', [$tarefa->id]);
    }
}

TarefasServiceProvider:

namespace App\Classes\Tarefas;

use Illuminate\Support\ServiceProvider;

class TarefasServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->bind('App\Classes\Tarefas\TarefasInterface', function () {
            return new Tarefas();
        });
    }
}

Em outras palavras, como chamar uma variável $tarefasUsuario diretamente na class Tarefas sem ter que passá-la pelo TarefasController antes, ou sem usar $this->tarefasUsuario?

1 resposta
solução!

Fiz uma pergunta mais clara aqui https://cursos.alura.com.br/forum/topico-acesso-direto-sem-usar-this-36414