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

Type Error

Estou com o seguinte erro

TypeError
App\Service\CriadorDeSerie::criarSerie(): Argument #2 ($qtdTemporadas) must be of type int, null given, called in C:\Users\eliel.lima\Documents\projetos\controle-series\app\Http\Controllers\SeriesController.php on line 34

O argumento qtdTemporadas esta como int e mesmo assim ele informa esse erro. Alguém poderia me ajudar?

CriadordeSerie.php

use App\Models\Serie;

class CriadorDeSerie
{
    public function criarSerie(
        string $nomeSerie,
        int $qtdTemporadas,
        int $epPorTemporada
    ) :Serie {
        $serie = Serie::create(['nome' => $nomeSerie]);

        for ($i = 0; $i <= $qtdTemporadas; $i++) {
            $temporada = $serie->temporadas()->create(['numero' => $i]);

            for ($j = 1; $j <= $epPorTemporada; $j++) {
                $temporada->episodios()->create(['numero'=> $j]);
            };
        }
        return $serie;
    }
}

SeriesController.php

<?php

namespace App\Http\Controllers;

use App\Http\Requests\SeriesFormRequest;
use App\Models\Serie;
use App\Service\CriadorDeSerie;
use Illuminate\Http\Request;

class SeriesController extends Controller{

    public function index (Request $request) {
        $series = Serie::query()
            ->orderBy('nome')
            ->get();
        $mensagem = $request->session()->get('mensagem');

        return view('series.index', compact('series', 'mensagem'));

    }

    public function create()
    {
        return view('series.create');
    }

    public function store(
        SeriesFormRequest $request,
        CriadorDeSerie $criadorDeSerie
    ) {
        $serie = $criadorDeSerie->criarSerie(
            $request->nome,
            $request->qtd_temporada,
            $request->ep_por_temporada
        );

        $request->session()
            ->flash(
            'mensagem',
            "Série {$serie->id}  e suas temporadas e episódios foram criados com sucesso {$serie->nome}"
        );
        return redirect()->route('listar_series');
    }

    public function destroy(Request $request)
    {
        Serie::destroy($request->id);
        $request->session()
            ->flash(
                'mensagem',
                "Série removida com sucesso"
            );
        return redirect()->route('listar_series');
    }
}
2 respostas
solução!

Eliel, a mensagem de erro é bem clara. Você está passando nulo para onde deveria passar um inteiro. :-)

$request->qtd_temporada não está preenchido, então você não deve ter enviado o valor corretamente. ;-)

Eu recriei com o mesmo codigo e agora deu certo. No caso eu não estava passando o numero de temporadas na hora de criar uma nova serie? não creio :( kkkk Tem horas que o cérebro buga legal.