Nefungující formulář v jiném prohlížeči
- Arcane
- Člen | 10
Zdravím, mám takový zvláštní problém, se kterým jsem se ještě nesetkal. Mám stránku, na které si vytvářím formulář a v onSuccess si beru data z formuláře a posílám je na jinou stránku. Na notebooku v Chromu mi funguje vše v pořádku. Nicméně na desktopu ROVNĚŽ v Chromu mi formulář nefunguje. Ve formuláři mám jen input na hledaný výraz a checkbox. Nicméně na desktopu po kliknutá na Hledat se nic nestane. Jen se refreshne stránka. Když jsem zkoušel dát var_dump();exit; do onSuccess metody, tak se ani do ní stránka nedostala. Takže mám podezření, že je někde chyba už v tom, že to neví kam má při submitu skočit. Každopádně nechápu jak se může stejný kus kódu ve stejných prohlížečích, jen na různých pc chovat jinak. S žádným jiným prohlížečem, ani na mobilu problém nenastal. Takhle vypadá můj kod:
Presenter:
<?php
namespace App\Presenters;
use Nette;
use Nette\Application\UI\Form;
use Tracy\Debugger;
class HomepagePresenter extends Nette\Application\UI\Presenter {
/** @var \App\Model\Moduly @inject */
public $modul;
public function renderDefault() {
}
public function renderResults($searchInput, $checkbox) {
$results = $this->modul->getModulInfo();
if ($checkbox == '1') {
$mode = 'shortname';
} else {
$mode = 'fullname';
}
foreach ($results as $res) {
$url = $res['domena'] . 'webservice/rest/server.php?wstoken='
. $res['token'] . '&wsfunction=local_tul_ws_get_courses&moodlewsrestformat=json&'
. $mode . '=' . $searchInput;
// if($this->get_http_response_code($url) != "200") {
// break;
// } else {
// ini_set('default_socket_timeout', 5);
// $json = file_get_contents($url);
// }
$json = file_get_contents($url);
$obj = json_decode($json);
$final[] = $obj;
var_dump($final);
}
exit;
$this->template->final = $final;
}
// public function get_http_response_code($url) {
// $headers = get_headers($url);
// return substr($headers[0], 9, 3);
// }
public function createComponentSearchBar() {
$form = new Form;
$form->addText("searchInput", "Název předmětu: ")
->addRule(Form::FILLED, "Zadejte prosím požadovaný předmět")
->setAttribute("placeholder", "např. MA1 nebo Matematika");
$form->addSubmit("searchButton", "Hledat");
$form->addCheckbox("checkbox", "Způsob vyhledávání:")
->setAttribute("data-toggle", "toggle")
->setAttribute("data-on", "Zkratka")
->setAttribute("data-off", "Celý název")
->setAttribute("data-onstyle", "default");
$form->onSuccess[] = $this->processSearchBar;
$form->addProtection("Security token expiroval. Prosím odešlete formulář znovu");
return $form;
}
public function processSearchBar(Form $form) {
$value = $form->getValues(TRUE);
var_dump($value);
exit;
$this->redirect('Homepage:results', $value['searchInput'], $value['checkbox'] );
}
}
Template:
{form searchBar}
{label checkbox: /}
<br />
{input checkbox:}
<br/>
<br/>
{label searchInput /}
<div class="input-group">
{input searchInput class => "form-control"}
<span class="input-group-btn">
{input searchButton class => "btn btn-default" }
</span>
</div>
{/form}
A i když jsem si zkusil přes var_dump() vypsat $form (hned za $form->addProtection) a exit;, tak na dektopu jsem měl místo celé stránky akorát výpis dumpu, ale na notebooku se mi načetla v podstatě celá stránka normálně a jen místo ono formuláře se mi vypsal onen výpis dumpu.
Editoval Arcane (17. 4. 2016 14:03)
- Václav Kraus
- Člen | 77
Arcane napsal(a):
Tím je myšleno co? :) Tohle je můj první projekt v Nette, takže jsem v něm velký začátečník. Tracy jako taková mi žádné chyby nevrací.
- Arcane
- Člen | 10
Aha, to je super. Tak jsem tam přidal:
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
Aspoň mi to teď ukazuje chyby formu. No tak na tom pc mi to píše chybu, že expiroval security token, at odešlu form znovu. Když zakomentuji teda addProtection, tak už mi to jede i na pc, ale…to asi nebude správný postup ne? Proč mi to tam tuto chybu vyhazuje pokaždé?
Editoval Arcane (17. 4. 2016 15:40)
- Václav Kraus
- Člen | 77
Arcane napsal(a):
Aha, to je super. Tak jsem tam přidal:
<ul class="errors" n:if="$form->hasErrors()"> <li n:foreach="$form->errors as $error">{$error}</li> </ul>
Aspoň mi to teď ukazuje chyby formu. No tak na tom pc mi to píše chybu, že expiroval security token, at odešlu form znovu. Když zakomentuji teda addProtection, tak už mi to jede i na pc, ale…to asi nebude správný postup ne? Proč mi to tam tuto chybu vyhazuje pokaždé?
Pokud se nepletu, tak addProtection funguje jen po přihlášení uživatele.