Form při odeslání vyhodí error a neodešle se
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- zdenda204
- Člen | 21
Ahoj, pomocí ajaxu si vykreslím Nette form, ale při odeslání tohoto formu se mi do souboru vypíše error
Nette\UnexpectedValueException: Method AdminPresenter::createComponentEditCouponForm() did not return or create the desired component. in C:\xampp\htdocs\market\libs\Nette\ComponentModel\Container.php:177 @ http://localhost/…dmin/coupons?… @@ exception-2014–01–14–22–39–24–227d25ef9a42ce506a79ff9958024439.html
a nic se nestane.
Přikládám části ze šablony, kde je na začátku ten snippet s tabulkou a o kus níže ajaxový odkaz který volá funkci na vykreslení toho snippetu.
{snippet editCouponForm}
{if $couponToEdit !== null}
<h3>Editovat slevový kupón</h3>
{form editCouponForm class => ajax}
<span class="jstooltip" data-original-title="Token zadává uživatel při uplatnení slevy">Token:</span> {input token class => randomString} <a class="jstooltip" data-original-title="Vygeneruje náhodný text o délce 15 znaků<br>a dá ho do políčka vlevo." href="#" onclick="randomString();">Vygenerovat náhodný token</a><br>
<span class="jstooltip" data-original-title="Do kdy bude kupón platný">Expirace:</span> {input expiration} (Neměňte, pokud chcete, aby kupón neměl expiraci)<br>
<span class="jstooltip" data-original-title="Sleva (v procentech)">Sleva (%):</span> {input discount} <br>
{input submit}
{/form}
{/if}
{/snippet}
<a class="ajax" n:href="editCoupon! $coupon->id">Upravit</a>
A zde jsou funkce z presenteru obsluhující ten form, snippet a ajaxový odkaz.
public function handleEditCoupon($couponId){
$this->couponToEdit = $couponId;
if(!$this->isAjax()){
$this->redirect("this");
}
$this->redrawControl("editCouponForm");
}
protected function createComponentEditCouponForm(){
$info = $this->cr->getCoupon($this->couponToEdit)->fetch();
if(!$info){
$this->flashMessage("Tento kupón neexistuje.", "danger");
return null;
}
$exp;
if($info->expiration_time !== 0){
$exp = date('Y-m-d', $info->expiration_time);
}else {
$exp = null;
}
$form = new UI\Form;
$form->addText("token")->setRequired("Musíte uvést token (nebo ho vygenerovat).")->setValue($info->token);
$form->addText("expiration")->setType("date")->setValue($exp);
$form->addText("discount")->setType("number")->setValue($info->discount);
$form->addSubmit("submit", "Editovat");
$form->onSuccess[] = $this->editCouponFormSubmitted;
return $form;
}
public function editCouponFormSubmitted(UI\Form $form){
$values = $form->getValues();
if(empty($values->token)){
$this->flashMessage("Token nesmí být prázdný.", "danger");
return;
}
$this->cr->editCoupon($this->couponToEdit, $values->token, $values->discount, null, $values->expiration);
$this->flashMessage("Kupón byl upraven.", "success");
$this->couponToEdit = null;
if(!$this->isAjax()){
$this->redirect("this");
}
$this->redrawControl("editCouponForm");
$this->redrawControl("couponsTable");
}
Editoval zdenda204 (15. 1. 2014 0:01)
- David Matějka
- Moderator | 6445
jelikoz vracis null
$info = $this->cr->getCoupon($this->couponToEdit)->fetch();
if(!$info){
$this->flashMessage("Tento kupón neexistuje.", "danger");
return null;
}
- tohle overuj v action nebo handle, ne v createComponent
- handle* metoda se pri zpracovavani formulare nezavola, tudiz je couponToEdit prazdny…
Editoval matej21 (15. 1. 2014 0:13)