Předávání pole v metodě redirect

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Panthera
Člen | 20
+
0
-

Zdravím, potřeboval bych poradit s předáváním pole při editaci

<?php
public function handleEdit($id){
	$article = $this->database->fetch("SELECT * FROM articles WHERE id = $id");
    $this->redirect("Article:edit", $article);
}
?>

Pokaždé se mi pak při vypsání v:

<?php
public function createComponentEdit($values){
        $form = new UI\Form;
        $form->setRenderer(new BootstrapRenderer);
        $form->addSelect("page","Stránka", [
            "Homepage" => "Domovská stránka",
            "Kontakt" => "Kontakt"
        ]);
        $form["page"]->setDefaultValue("Homepage");
        $form->addText("title","Název článku:")
            ->setValue($values);
        $form->addTextArea("content","Obsah:");
        $form->addSubmit("send","Odeslat")
            ->setAttribute("class","btn-success col-xs-2 col-xs-offset-10");
        $form->onSuccess[] = [$this,"FormSucceeded"];
        return $form;
    }
?>

vrátí v ->setValue($values); pouze „edit“

japlavaren
Člen | 404
+
0
-

Ahoj

Predaj si #id a v actionEdit to znovu nacitaj do triednej premmenej. Nemas dovod to robit takto, okrem toho tym spravis bezpecnostnu dieru.

Panthera
Člen | 20
+
0
-

Díky, url je teď v této podobě

http://localhost:3000/…ticle/edit/2

<?php
public function handleEdit($id){
        $this->redirect("Article:edit", array("id" => $id));
    }
?>

a

<?php
public function createComponentEdit($id){
	$article = $this->database->fetch("SELECT * FROM articles WHERE id = $id");
?>

v $id je stále „edit“, mohu se zeptat proč?

japlavaren
Člen | 404
+
-1
-

Preco je edit v url – pozri si routery. Pravdepodpbne ti to chyti daka routa a vlozi to tam

Potrebujes ten handle? Pretoze podla kodu len spravi redirect co mi pride zbytocne. Mozes sa v saablone priamo odkazovat na action edit bez pouzitia handle

V create component by si nemal priamo pristupovatk nacitaniu z db. Myslel som to tak, ze si spravis v class private property napriklad article, v action edit si to naplnis a v create component zavolas set defaults s this->article. Popripade to set defaults das az do render edit metody

duke
Člen | 650
+
+1
-

Panthera napsal(a):

v $id je stále „edit“, mohu se zeptat proč?

Protože metoda createComponentEdit se volá s parametrem názvu komponenty (viz implementace v nette) a nikoli s parametry, jako má metoda render.

Správně takto:

protected function createComponentEdit()
{
 	$id = $this->getParameter('id');
	// ...
}

A v tom sql dotazu pozor na bezpečnostní díru. Pro vkládání hodnot do sql dotazů používej placeholdery.

Editoval duke (21. 9. 2017 23:26)

Panthera
Člen | 20
+
0
-

Sql už jsem si opravil, jen předtím mi to přestalo kvůli němu ukazovat error.

Již vše funguje tak, jak má. Děkuji :)