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

in_array(): Argument #2 ($haystack) must be of type array, null given

No router quando coloco o código abaixo vem os dados corretos como na imagem.

route::post('/seasons/{season}/episodes', function (\Illuminate\Http\Request $request){ dd($request->all()); });

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Mas quando chamo o EpisodesController como abaixo dá erro de valor null

Route::post('/seasons/{season}/episodes', [EpisodesController::class, 'update'])->name('episodes.update');

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

vi que o erro está vindo do nulo para o $watchedEpisodes quando recebe o dado do $request->episodes

não entendo pq no primeiro roter acima chamando o request dá certo e depois pelo controller dá nulo

<?php

namespace App\Http\Controllers;

use App\Models\Episode;
use App\Models\Season;
use illuminate\Http\Request;

class EpisodesController {
    public function index(Season $season) {
        return view('episodes.index', ['episodes' => $season->episodes]);
    }

    public function update(Request $request, Season $season) {
        $watchedEpisodes = $request->episodes;
        //dd($request->episodes);
        $season->episodes->each(function (Episode $episode) use ($watchedEpisodes) {
            $episode->whatched = in_array($episode->id, $watchedEpisodes);
        });
        $season->push();//salva as alterações da model atual e seus relacionamentos

    return to_route('episodes.index', $season->id)->with('mensagem.sucesso', 'Episódios marcados como assistidos');    }
}

no laravel.log vem o erro indentifica acima [2023-01-07 01:18:16] local.ERROR: in_array(): Argument #2 ($haystack) must be of type array, null given {"exception":"[object] (TypeError(code: 0): in_array(): Argument #2 ($haystack) must be of type array, null given at D:\PHP\projetos\controle-series\app\Http\Controllers\EpisodesController.php:18) [stacktrace]

#0 D:\PHP\projetos\controle-series\app\Http\Controllers\EpisodesController.php(18): in_array(10, NULL)

https://github.com/hnhostins/controle-series

na minha controller update logo no começo pus esse comando para ver se estava passando o metodo post, mas está indo o get

dd($uri = $request->method());

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

6 respostas

Estou no aguardo.

Fala mano, beleza?

manda o código da view 'episodes.index' e da view onde chama o método de update

segue o git

https://github.com/hnhostins/controle-series

Essas views não estão no repositório, por isso pedi pra mandar.

fiz a atualização no git

episodes/index.blade.php

<x-layout title="Episódios:">
    <form method="post">
        @csrf
        <ul class="list-group">
            @foreach ($episodes as $episode)
                <li class="list-group-item d-flex justify-content-between align-items-center">
                    Episódio - {{ $episode->number }}
                    <input type="checkbox"
                           name="episodes[]"
                           value="{{ $episode->id }}"
                           @if ($episode->watched) checked @endif />
                </li>
            @endforeach
        </ul>
        <button class="btn btn-primary mt-2 mb-2">Salvar</button>
    </form>
</x-layout>

views/components/series form.blade.php

<form action="{{ $action }}" method="post">
    @csrf

    @if($update)
    @method('PUT')
    @endif
    <div class="mb-3">
        <label for="nome" class="form-label">Nome:</label>
        <input type="text"
               id="nome"
               name="nome"
               class="form-control"
               @isset($nome)value="{{ $nome }}"@endisset>
    </div>

    <button type="submit" class="btn btn-primary">Adicionar</button>
    <a href="{{ route('series.index') }}" class="btn btn-light" >Cancelar</a>
</form>
solução!

Mano, o erro estava ao importar o request no começo do código em EpisodesController.

Em use illuminate\Http\Request;, o Illuminate está em minúsculo, não chamando a classe de Request do Laravel, retornando nulo.

Outro erro que encontrei foi em $episode->whatched = in_array($episode->id, $watchedEpisodes);. Substitui o whatched por watched.