NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Laravel 10 - nejde odstranit článek z databáze

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jiří REMAR
Člen
Avatar
Jiří REMAR:7.11.2023 23:36

Ahoj začal jsem se učit Laravel (10), postupuji podle místního tutoriálu. Bohužel je psaný na Laravel 8. Nějak jsem se pár krokama prokousal. Laravel má docela fajn dokumentaci ale zasekl jsem se na mazání dat z databáze. Po kliknutí na odkaz ODSTRANIT se nic nestane ani žádný error, Lámu si s tim hlavu už asi týden a už jsem v koncích, proto bych chtěl poradit od zkušených Laraveláků.

Pohled na výpis článků:

@extends('base')

@section('title', 'Seznam článků')
@section('description', 'Výpis všech článků v administraci.')

@section('content')
    <table class="table table-striped table-bordered table-responsive-md">
        <thead>
            <tr>
                <th>Titulek</th>
                <th>Popisek</th>
                <th>Datum vytvoření</th>
                <th>Datum poslední změny</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @forelse ($articles as $article)
                <tr>
                    <td>
                        <a href="{{ route('article.show', ['article' => $article]) }}">
                            {{ $article->title }}
                        </a>
                    </td>
                    <td>{{ $article->description }}</td>
                    <td>{{ $article->created_at }}</td>
                    <td>{{ $article->updated_at }}</td>
                    <td>
                        <a href="{{ route('article.edit', ['article' => $article]) }}">Editovat</a>
                        <a href="#" onclick="event.preventDefault(); $('#article-delete-{{ $article->id }}').submit();">Odstranit</a>

                        <form action="{{ route('article.destroy', ['article' => $article]) }}" method="POST" id="article-delete-{{ $article->id }}" class="d-none">
                            @csrf
                            @method('DELETE')
                        </form>
                    </td>
                </tr>
            @empty
                <tr>
                    <td colspan="5" class="text-center">
                        Nikdo zatím nevytvořil žádný článek.
                    </td>
                </tr>
            @endforelse
        </tbody>
    </table>

    <a href="{{ route('article.create') }}" class="btn btn-primary">
        Vytvořit nový článek
    </a>
@endsection
Zdroj: https://www.itnetwork.cz/php/laravel/jednoduchy-redakcni-system-v-laravel-tvorba-clanku

Kontroler:

public function destroy(Article $article): RedirectResponse
{
    try {
        $article->delete();
    } catch (\Exception $exception) {
        return redirect()->back()->withErrors(['Při procesu odstranění článku došlo k chybě.']);
    }

    return redirect()->route('article.index');
}
Zdroj: https://www.itnetwork.cz/php/laravel/jednoduchy-redakcni-system-v-laravel-sprava-clanku

Zkusil jsem: Myslím si že se nějak nepropisuje ID článku na odkaz. Zkoušel jsem si hrát s metodou onclick ale bohužel jsem bezradný.
Zde je odkaz zde na síť kde je kód úplně celý.

Článek kde se tvoří články:
Tvorba článků Zdroj: https://www.itnetwork.cz/…vorba-clanku

A zde je odkaz kde se mažou články:
Správa článků Zdroj: https://www.itnetwork.cz/…prava-clanku

Zkoušel jsem si downloadnout hotové řešení a to funguje, takže si myslim, že problém bude mezi verzí 8 a 10 nebo mezi klávesnicí a židlí 😞

PHP verze 8.2.4

Chci docílit: Chtěl bych dosáhnout toho, že po kliknutí bude fungovat smazání článku.

Děkuji za každou radu.

 
Odpovědět
7.11.2023 23:36
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.11.2023 10:46

Kdyz rikas, ze mas verzi, ktera nejede a verzi, ktera jede, zkousel jsi porovnavat soubory? totalCommander umi porovnat 2 soubory a zvyraznit rozdilne casti (porovnat obsah souboru)

--
Podle textu na tech stranek, zda se, ze kod mas stejne. (neporovnaval jsem text, jen by oko).
zajimave je, ze formular neobsahuje id. Laravel neovladam, ale prepsani na html jo

                        <form action="{{ route('article.destroy', ['article' => $article]) }}" method="POST" id="article-delete-{{ $article->id }}" class="d-none">
                            @csrf
                            @method('DELETE')
                        </form>

<form action="url?destroy&nevimco" method="POST" id="article-delete-123" class="d-none">
                            @csrf // tohle nevim, co dela
                            @method('DELETE') // tohle nevim, co dela
... tady by melo byt neco jako
<input type=hidden name=akce value=destroy>
<input type=hidden name=id value=123>
                        </form>

Server muze odmitnout vse, co mu predas pres GET, pokud odesilas formular metodou POST. Zalezi na nastaveni serveru.

Nechce se mi to studovat, ale pod nadpisem "Spuštění DELETE metody" je neco podobneho, formular jen ciste pomoci post.

<form action="http://localhost:8000/article/uvod" method="POST" id="article-delete-1" class="d-none">
    <input type="hidden" name="_token" value="g7K5Lt8LRE1pzVlrWfVhCwNy78UgP6f8fPIwHXnb">
    <input type="hidden" name="_method" value="DELETE">
</form>
Zdroj: https://www.itnetwork.cz/php/laravel/jednoduchy-redakcni-system-v-laravel-tvorba-clanku
Editováno 8.11.2023 10:47
 
Nahoru Odpovědět
8.11.2023 10:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.