Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Injeção de Dependência não está funcionando

Estou desenvolvendo um projeto meu para treinar. Do mesmo modo que foi proposto no curso a criação de uma classe Repository, resolvi separar as regras de negócio da minha classe Ocorrencias para uma classe chamada OcorrenciaService.

<?php

namespace App\Services;

class OcorrenciaService
{
     \\ lógica
 }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Porém quando tento injetá-la na minha classe OcorrenciaController:

namespace App\Http\Controllers;

use App\Models\Setor;
use App\Models\TipoOcorrencia;
use App\Services\OcorrenciaService;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class OcorrenciaController extends Controller
{
    public function report(Request $request)
    {
       //codigo
    }

    public function store(OcorrenciaService $ocorrenciaService, Request $request)
    {
        $request->validate([
            'report' => ['required', Rule::in(['Parada', 'Retorno', 'Observacao'])],
            'setor' => ['required', 'exists:App\Models\Setor,cosset_codigo'],
            'tipo' => ['exists:App\Models\TipoOcorrencia,tpocor_codigo'],
            'data' => ['required'],
            'hora' => ['required']
        ]);

        $data = (object) $request->except('_token');

        if($ocorrenciaService->saveOcorrencia($data)){
            return to_route('home');
        }
        return to_route('setores.index');
    }
}

O laravel diz que a classe OcorrenciaService não existe: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeJa revirei todo o código, ja rodei o composer dump-autoload, ja mudei o nome da classe, o local, o namespace, mas nada resolve. Alguma dica????

2 respostas
solução!

Oii, Carlos. Você deve declarar essa sua service no construtor, assim como na aula o Vini declara a repository no construtor.

E no método store você pode chamar ela assim : $this->ocorrenciaService->store().

Dessa forma você usa o Constructor Property Promotion do PHP, dá uma olhada nesse vídeo:

https://www.youtube.com/watch?v=XJCSQ2nWRrQ

Bons estudos :)

Perfeito Vinicius, funcinou diretinho. Achei que o Laravel também fazia a injeção direto no método assim como é feito com o Request e os Models. Obrigado