03-Usando serviços para exclusão aula 08
ao refazer o código para adicionar séries o navegador apresenta o seguinte erro
Argument 3 passed to App\Services\CriadorDeSerie::criarSerie() must be of the type int, null given, called in C:\Users\anton\Documents\Estudos\Alura\Formacao PHP\Laravel\controle-series\app\Http\Controllers\SeriesController.php on line 31
esse é meu arquivo SeriesController.php
<?php
namespace App\Http\Controllers;
use App\Episodio;
use App\Http\Requests\SeriesFormRequest;
use App\Serie;
use App\Services\CriadorDeSerie;
use App\Services\RemovedorDeserie;
use App\Temporada;
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_temporadas,
$request->ep_por_temporada
);
$request->session()
->flash(
'mensagem',
"Série {$serie->id} e suas temporadas e episódios criados com sucesso {$serie->nome}"
);
return redirect()->route('listar_series');
}
public function destroy(Request $request, RemovedorDeserie $removedorDeserie)
{
$nomeSerie = $removedorDeserie->removerSerie($request->id);
$request->session()
->flash(
'mensagem',
"Série $nomeSerie removida com sucesso"
);
return redirect()->route('listar_series');
}
}
arquivo CriadorDeSerie.php
<?php
namespace App\Services;
use App\Serie;
use Illuminate\Support\Facades\DB;
class CriadorDeSerie
{
public function criarSerie(
string $nomeSerie,
int $qtdTemporadas,
int $epPorTemporada
): Serie {
DB::beginTransaction();
$serie = Serie::create(['nome' => $nomeSerie]);
$this->criaTemporadas($qtdTemporadas, $epPorTemporada, $serie);
DB::commit();
return $serie;
}
/**
* @param int $qtdTemporadas
* @param int $epPorTemporada
* @param $serie
*/
private function criaTemporadas(int $qtdTemporadas, int $epPorTemporada, Serie $serie)
{
for ($i = 0; $i <= $qtdTemporadas; $i++) {
$temporada = $serie->temporadas()->create(['numero' => $i]);
$this->criaEpisodios($epPorTemporada, $temporada);
}
}
/**
* @param int $epPorTemporada
* @param $temporada
*/
private function criaEpisodios(int $epPorTemporada, \Illuminate\Database\Eloquent\Model $temporada): void
{
for ($j = 1; $j <= $epPorTemporada; $j++) {
$temporada->episodios()->create(['numero' => $j]);
}
}
}
arquivo RemovedorDeSerie.php
<?php
namespace App\Services;
use App\Episodio;
use App\Serie;
use App\Temporada;
use Illuminate\Support\Facades\DB;
class RemovedorDeSerie
{
public function removerSerie(int $serieId): string
{
$nomeSerie = '';
DB::transaction(function () use ($serieId, &$nomeSerie) {
$serie = Serie::find($serieId);
$nomeSerie = $serie->nome;
$this->removerTemporadas($serie);
$serie->delete();
});
return $nomeSerie;
}
private function removerTemporadas(Serie $serie): void
{
$serie->temporadas->each(function (Temporada $temporada) {
$this->removerEpisodios($temporada);
$temporada->delete();
});
}
private function removerEpisodios(Temporada $temporada): void
{
$temporada->episodios()->each(function (Episodio $episodio) {
$episodio->delete();
});
}
}
já reli o código algumas vezes, revi a aula tbm mais continua na mesma, refiz o código, baixei da aula mas continua no mesmo erro.
Link para o projeto: https://github.com/Jeff-syscyber/criador-series