Předávání pole v metodě redirect
- Panthera
- Člen | 20
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
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
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
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
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)