Fórumok
üdv,
Adatbázisban törlést hajtok végre. Működik minden, de olyan mintha a kód kétszer futna le. A törlés megtörténik, de utána a felső ágra fut a category/noindex.html.twig
#[Route('/category/del/{id}', name: 'del_category')]
public function delCategory( ManagerRegistry $doctrine, Request $request, int $id ): Response
{
$entityManager = $doctrine->getManager();
$category = $entityManager->getRepository( Category::class )->find($id);
if ( !$category ) {
return $this->render('category/noindex.html.twig', [
'category' => 'category',
]);
} else {
$text = $category->getCategory();
// remove
$entityManager->remove($category);
// save / delete
$entityManager->flush();
return new Response( 'Category deleted: ' . $text . '<br><a href="/category">Index</a>' );
}
}
Mit rontok el?
Környezet:
Fedora 40
Symfony CLI version 5.9.1
PHP 8.3.8 (cli) (built: Jun 4 2024 14:53:17) (NTS gcc x86_64)
Zend Engine v4.3.8, Copyright (c) Zend Technologies
Hozzászólások
dev toolbar mit mutat? ott van doctrine fül
4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.
A konzolon látni, hogy valóban kétszer fut le. :o
Ez a del_product nevű routera fut le kétszer, az indító posztban pedig del_category nevű route van.
Igen, jogos.
De mindkettő esetében ugyanaz a jelenség.
Ez ket kulonbozo request, a bemasolt kodreszlet nem tartalmaz hivast.
if ($request->isMethod('POST'))
{
.....// többi kód
}
return $this->render('category/delete.html.twig', [ 'message' => 'Invalid request method', ]);
Persze, védelemnek jó, csak épp nem a tünetet kellene kezelni, hanem a hibát kiiktatni.
Ebben a delCategory metódusban semmi olyan nincs ami miatt ez kétszer futna.
Valami más triggereli, frontenden egy elb*szott js vagy akármi.
Én egy debug breakpointot tennék rá, hátha látszik hogy mi hívja először és másodszor.
Nem lehet, hogy CORS miatt az OPTION-re is lefut?
Konkrétan a böngésződben meg is jelenik a noindex tartalma vagy csak valahol máshol látod?
Ha csak a duplázás a gond, akkor lehet olyan is, hogy az oldalbetöltéskor lefut a háttérben egy asset betöltés helyett ugyanaz az oldal.
Most mondok egy rossz példát (aki a példába beleköt az nem tud olvasni), pl be akarod tölteni a favicon-t a böngésződben, de közben a current routet tölti be valami okból. (pl egy route elkonfigolás miatt) és így 2x fut le ugyanaz az url.
Érdemes az oldalon ilyenkor a network-öt megnézni inspect -el. Volt már ilyenem régen.
A neten olvasom, hogy mások is belefutottak már ebbe. Elolvastam a Symfony doksit mégegyszer és azt javasolja, hogy a modosításhoz hasonlóan érdemes a törlést is megvalósítani.
Így valóban jól működik és elegánsabb is.