Doplnění quickstart – mazání příspěvků

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Berry
Začátečník | 70
+
0
-

Ahoj, prolouskal jsem se quickstartem až na konec. Ted zkouším co dál. Třeba přidat mazání příspěvku. Chci se zeptat jak nejlépe by jste to řešili

V šabloně příspěvku přidám odkaz na delete.latte. A moje myšlenka je tam mít dva odkazy ANO | NE. Při kliknutí na ne se vrátit zpět na příspěvek a při ano smazat z databáze.

Upravil jsem PostPresenter aby mi po kliknutí na smazat naběhla šablona delete

public function actionDelete($postId)
    {
    if (!$this->getUser()->isLoggedIn()) {
        $this->redirect('Sign:in');
    }
    $post = $this->database->table('posts')->get($postId);
    if (!$post) {
        $this->error('Příspěvek nebyl nalezen');
    }

    }

Jak ideálně postupovat dále.

Felix
Nette Core | 1247
+
+1
-

Na mazani bych spise doporucoval signaly resp. handle<> metody.

https://doc.nette.org/…n/components#…

Hodi se, prevazne, kdyz nechceme mit specialni sablonu na dany krok. Confirm na mazani bych spise vyresil javascriptove, treba takto.

<a n:href="delete!, id => $id" onClick="return confirm('Opravdu smazat?');">Smazat</a>
Berry
Začátečník | 70
+
0
-

Felix napsal(a):

Na mazani bych spise doporucoval signaly resp. handle<> metody.

https://doc.nette.org/…n/components#…

Hodi se, prevazne, kdyz nechceme mit specialni sablonu na dany krok. Confirm na mazani bych spise vyresil javascriptove, treba takto.

<a n:href="delete!, id => $id" onClick="return confirm('Opravdu smazat?');">Smazat</a>

Díky, kouknu na to.

Berry
Začátečník | 70
+
0
-

Tak jsem v rychlosti zkusil vytvořit v app/componets DeleteControl.php

<?php

use Nette\Application\UI\Control;

class DeleteControl extends Control
{

}
?>

Tam bych chtěl dát

<?php
public function handleDelete
{
    if (!$this->isClickable($x, $y)) {
        throw new Nette\Application\UI\BadSignalException('Action not allowed.');
    }

    // ... processing of signal ...
}
?>

A jako signál něco takového

<?php
$this->database->table('posts')->get($postId)->delete();
$this->flashMessage('Prispevek smazan');
?>

Problém je, že v tom mám guláš a hlavně laděnka po mě chce tu HendleDelete v PostPresenteru

kejlicz
Člen | 201
+
0
-

A proč to máš v komponentě. To potřebuješ? Pro začátek si to zkus normálně v presenteru.

PostPresenter.php

	public function handleDelete($id)
	{
		//tady to smažeš z DB, případné předtím ověříš, zda má na mazání uživatel práva

		$this->flashMessage("Smazáno");
		$this->redirect("this");
	}

tohle v šabloně

<a n:href="delete!, id => $id" onClick="return confirm('Opravdu smazat?');">Smazat</a>

A při kliknutí na ten odkaz se provede handleDelete a stránka se refreshne.

Berry
Začátečník | 70
+
0
-

kejlicz napsal(a):

A proč to máš v komponentě. To potřebuješ? Pro začátek si to zkus normálně v presenteru.

PostPresenter.php

	public function handleDelete($id)
	{
		//tady to smažeš z DB, případné předtím ověříš, zda má na mazání uživatel práva

		$this->flashMessage("Smazáno");
		$this->redirect("this");
	}

tohle v šabloně

<a n:href="delete!, id => $id" onClick="return confirm('Opravdu smazat?');">Smazat</a>

A při kliknutí na ten odkaz se provede handleDelete a stránka se refreshne.

Takhle jsem si to představoval, jen při studiu těch výše uvedených signálů jsem myslel, že to bude třeba. Ale takhle to funguje také a pro ten quickstart to asi stačí.